0

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

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

this.state = {}
this.forceUpdate()

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

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

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

4

1 回答 1

4

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

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

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

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

this.setState(
  Object.keys(this.state).reduce((a, c) => {
    a[c] = undefined;
    return a;
  }, {})
)
于 2018-12-13T16:08:51.693 回答