由于删除了对Null
的支持而replaceState
支持shallow merging,是否可以删除所有状态变量并通过添加新变量来更新状态,如下例所示,而不会发生变异( setState
)国家直接?
this.state
答案 0 :(得分:4)
是否可以删除所有状态变量并通过添加新变量来更新状态,如下例所示,而不直接改变(this.state)状态
我可能错了,但我认为这是不可能的。
为组件设置状态时,您需要为组件建立一个要遵守的模型,因此擦除组件状态的属性(而不是更新它们)会破坏状态管理的原则。我相信这部分是删除replaceState
的动机有关详细信息,请参阅https://github.com/facebook/react/issues/3236
想想冰和水之间的区别(关键的区别是温度)。温度永远不会从等式中消失,它只会改变数值,水也会相应地响应。有状态反应组件在类似原则下运行。
通过为您的组件建立模型,我们在2之间创建了一个契约,并且可以以可预测的方式对我们的UX进行更改。
您当然可以将这些值更新为null,undefined,0,false等,但是一旦创建它们就无法从初始状态的签名中删除它们。
您可以使用嵌套状态轻松完成此操作:
this.state = { foo: { bar: { baz: 'buzz' } } }
// remove state.foo.bar
this.setState({ foo: {} })
答案 1 :(得分:1)
嗯,不。据我所知,你不能解决这个问题,但你已经知道了this.state = {}
。但是,我无法想象你想完全清除你的状态的情况,但我可以想象你有时想重置状态。这可以通过以下方式完成
class Cmp extends React.Component {
getClearState() {
return {
foo: undefined;
bar: undefined;
baz: undefined;
qux: undefined;
}
}
caseOne() {
this.setState(this.getClearState())
}
caseTwo() {
this.setState({
...this.getClearState(),
qux: 'my QUX',
})
}
render() {}
}
答案 2 :(得分:0)
你可以为案例1做这样的事情:
this.setState(Object.assign({}, {}));
这个用于2:
this.setState(Object.assign({}, {qux:'blah'}));