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

Javascript 反应,避免突变状态的原因,javascript,reactjs,Javascript,Reactjs,我知道变异状态可以对PureComponent(或类似)起作用 有没有其他理由不改变这种状态 我想知道第三条路可以吗 您可以将状态视为您的数据库 您不直接改变数据库,而是通过API修改数据库 setState是API 当然,您可以直接修改数据库,但其他组件将很难检索这些数据,因为现在这些数据不一致,因为有人没有使用框架为您提供的API 如果您真的喜欢改变状态的方式,可以使用Vue,Vue就是这样设计的。这里有一个例子:您启动了一个异步方法,用当前状态数据发送请求。同时,您已经执行了一个改变状态的

我知道变异状态可以对
PureComponent
(或类似)起作用 有没有其他理由不改变这种状态

我想知道第三条路可以吗


您可以将
状态
视为您的数据库

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

setState
API

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


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

这里有一个例子:您启动了一个异步方法,用当前状态数据发送请求。同时,您已经执行了一个改变状态的函数。这将导致异步函数发送变异状态,尽管它打算在变异前发送状态。

您不应更改状态!
  // 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]});
 }