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

React how to delete properties from state

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

在react 16之前我只是调用了这两行

this.state = {}
this.forceUpdate()

随着更新到 React 16,这不再有效。 目前我在 shouldComponentUpdate 方法中有这个解决方法:

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

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

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

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

所以无法删除已经存在的密钥。您唯一可以做的就是将当前键设置为未定义。 如果你知道这些属性,你可以手动设置它们。

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

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