我正在尝试替换整个状态,或者至少从中删除所有属性。
在做出反应16之前,我只叫这两行
this.state = {}
this.forceUpdate()
随着反应16的更新,它不再起作用。 目前,我在shouldComponentUpdate方法中有此解决方法:
for (let prop in nextState) {
if (nextState.hasOwnProperty(prop)) {
delete nextState[prop];
}
}
但是这种“感觉”不对。那么,有人知道用新对象重置整个状态的正确方法吗?据我测试this.setState只是改变差异,而其他属性保持不变。
答案 0 :(得分:1)
您不能从状态中删除属性,因为它在内部使用合并
nextState = Object.assign({}, nextState, partialState);
因此无法删除已经存在的密钥。您只能将当前键设置为undefined。 如果您知道这些属性,则可以手动进行设置。
如果没有,您可以尝试将它们全部设置为undefined:
this.setState(
Object.keys(this.state).reduce((a, c) => {
a[c] = undefined;
return a;
}, {})
)