【问题标题】:setState array of object对象的 setState 数组
【发布时间】:2017-12-21 10:54:43
【问题描述】:

如何避免使用循环设置状态?我有这个

const here = [{a: 'abc'},{b: 'xyz'}]

我做this.setState({'some_other_key':123, ...here}) 它似乎不起作用。

【问题讨论】:

  • 您通常不会在整个对象上设置状态,而只是在要更改的键上设置状态。典型的例子是 this.setState({some_other_key: 2})

标签: javascript reactjs ecmascript-6 redux


【解决方案1】:

您只需要将那些元素提供给您希望更改的 setState 而不是其他元素,因此您只需要

 this.setState({'some_other_key':123})

setState 执行合并,因此如果键存在,它的值就会改变,如果它不存在,则创建一个新的,而所有其他的都保持原样。

要将对象添加到 setState 数组,您可以执行以下操作

this.setState(prevState => ({
    exist: [...prevState.exist, {'some_other_key':123}]
}))

【讨论】:

  • 我需要设置exist variable,可能命名混乱。
  • 更改命名顺便说一句。
  • 简,据我所知,您需要将数组设置为状态并向其附加一个对象,我更新了我的答案以执行相同的操作
  • prevState.exist?还不存在,会不会报错?
  • 你能忽略“存在”吗?我改变了命名。
【解决方案2】:

试试const exist = {{a: 'abc'},{b: 'xyz'}}

【讨论】:

  • 虽然只有代码的答案可能会解决原始问题,但对您的解决方案的一些解释会提高您的答案的一般实用性。
【解决方案3】:

循环在哪里? 如果你有 const here = {a:'abc', b:'xyz'} 那么this.setState({'some_other_key':123, ...here}) 应该可以工作了。

如果const here = [{a: 'abc'},{b: 'xyz'}] 那么{'some_other_key':123, ...here}就是

{ 'some_other_key': 123, 0: {a: 'abc'}, 1: {b: 'xyz'} }

如果const here = {a: 'abc', b: 'xyz'} 那么{'some_other_key':123, ...here}就是

{ 'some_other_key': 123, a: 'abc', b: 'xyz' } 这就是展开运算符 '...' 的工作原理。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2016-05-12
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多