传播操作员动态属性更新

时间:2017-01-26 20:47:20

标签: javascript reactjs redux react-redux

我的状态如下:

state: {
    1: {show: false, description: 'one'},
    2: {show: false, description: 'two'},
    3: {show: true, description: 'three'}
   }

取决于变量" id"来自行动,我必须更新状态。

这样的事情:

var returnedState = {...state, [id].show : ![id].show}

我该怎么做?

3 个答案:

答案 0 :(得分:6)

{...state,
 [id]: {
  show: !state[id].show 
 }
}

将复制原始状态,然后切换来自该操作的特定键/ id的show值。

这是一个有效的代码笔http://codepen.io/finalfreq/pen/mRBjZV

答案 1 :(得分:0)

之前的答案是正确的,但只是将show属性留在子对象上,删除其他对象。 要保留所有属性并更改所需的属性,必须使用:

 {...state, [id] : {...state[id], show: !state[id].show}}

必须添加...state[id]

答案 2 :(得分:0)

this.setState(prevState => ({
...state,
state[id]: !prevState[id].show
}))

在这里,您必须将最后一个状态作为prevState,然后使用提供的键更新与先前状态对象的值相反的对象。