如何在React中清除状态变量?

时间:2017-12-25 21:53:47

标签: reactjs

由于删除了对Null的支持而replaceState支持shallow merging,是否可以删除所有状态变量并通过添加新变量来更新状态,如下例所示,而不会发生变异( setState)国家直接?

this.state

3 个答案:

答案 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'}));