反应如何从状态中删除属性

时间:2018-12-13 15:22:43

标签: reactjs setstate react-16

我正在尝试替换整个状态,或者至少从中删除所有属性。

在做出反应16之前,我只叫这两行

this.state = {}
this.forceUpdate()

随着反应16的更新,它不再起作用。 目前,我在shouldComponentUpdate方法中有此解决方法:

for (let prop in nextState) { 
    if (nextState.hasOwnProperty(prop)) { 
        delete nextState[prop]; 
    } 
}

但是这种“感觉”不对。那么,有人知道用新对象重置整个状态的正确方法吗?据我测试this.setState只是改变差异,而其他属性保持不变。

1 个答案:

答案 0 :(得分:1)

您不能从状态中删除属性,因为它在内部使用合并

nextState = Object.assign({}, nextState, partialState);

因此无法删除已经存在的密钥。您只能将当前键设置为undefined。 如果您知道这些属性,则可以手动进行设置。

如果没有,您可以尝试将它们全部设置为undefined:

this.setState(
  Object.keys(this.state).reduce((a, c) => {
    a[c] = undefined;
    return a;
  }, {})
)