我知道突变状态可以对抗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]}); }
答案 0 :(得分:1)
您可以将state
视为数据库。
您不直接更改数据库,而是通过 API 修改数据库。
setState
是API
。
当然,您可以直接更改您的数据库,但是其他组件将很难检索这些数据,因为这些组件目前不一致,因为有人没有使用 API 该框架为您提供。
如果您真的很喜欢改变状态的方式,可以使用Vue
,Vue就是这样设计的。
答案 1 :(得分:1)
这里是一个示例:您已激发了一个异步方法,该方法发送带有当前状态数据的请求。同时,您执行了使状态发生变化的函数。这将导致异步功能发送突变状态,尽管事实上它打算在突变前发送状态。