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]});
}