我的状态如下:
state: {
1: {show: false, description: 'one'},
2: {show: false, description: 'two'},
3: {show: true, description: 'three'}
}
取决于变量" id"来自行动,我必须更新状态。
这样的事情:
var returnedState = {...state, [id].show : ![id].show}
我该怎么做?
答案 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,然后使用提供的键更新与先前状态对象的值相反的对象。