反应,避免突变状态的原因

时间:2020-06-05 02:50:36

标签: javascript reactjs

我知道突变状态可以对抗PureComponent(或类似的状态) 还有其他不改变状态的理由吗?

我想知道第三种方法是否可以吗?

  // The Right Way:
  // copy the existing items and add a new one
  addItemImmutably = () => {
    this.setState({
      items: [...this.state.items, this.makeItem()]
    });
  };

  // The Wrong Way:
  // mutate items and set it back
  addItemMutably = () => {
    this.state.items.push(this.makeItem());
    this.setState({ items: this.state.items });
  };
 // is this ok? (mutate but set state with new copy)
 addItem3rdWay = () => {
   this.state.items.push(this.makeItem());
   this.setState({items: [...this.state.items]});
 }

2 个答案:

答案 0 :(得分:1)

您可以将state视为数据库。

您不直接更改数据库,而是通过 API 修改数据库。

setStateAPI

当然,您可以直接更改您的数据库,但是其他组件将很难检索这些数据,因为这些组件目前不一致,因为有人没有使用 API 该框架为您提供。

如果您真的很喜欢改变状态的方式,可以使用Vue,Vue就是这样设计的。

答案 1 :(得分:1)

这里是一个示例:您已激发了一个异步方法,该方法发送带有当前状态数据的请求。同时,您执行了使状态发生变化的函数。这将导致异步功能发送突变状态,尽管事实上它打算在突变前发送状态。