微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深入掌握 react的 setState的工作机制

react 是单向数据流,若想要改变已有组件的外观,我们只能通过更改组件的 props 或者更新组件的 state。在 react 项目的代码中我们操作最多的就是 this.setState 方法。下面对 setState 方法进行详细的说明。

setState要点:react 框架为了提高性能,会对 state 的更新进行收集、合并、再进行一次批量的状态更新。这种机制常常导致一些意想不到的情况。

setState 有两种调用形式:

向 setState 传递对象

setState()并不会立即触发 state 的更新。

{ this.setState({demo: 2}); console.log(this.state.demo);// 1 }

1、🔔注意:在 addEventListener、setTimeout、ajax 回调中 this.setState 是立即触发的。

2、setState 会合并更新,可能会造成状态更新的丢失

{ this.setState({demo: this.state.demo + 1}); this.setState({demo: this.state.demo + 1}); } //click 之后 demo 为2而不是3

综上:在同一代码块中不要多次调用 this.setState 方法

react 的 setState 还提供了另一种调用形式:

this.setState(callbackFunc)

{ return { ...prevIoUsstate,foo: currentProps.bar }; });

该语法和直接为 setState 传递对象不同,不会合并更新。

{ this.setState({ demo: this.state.demo + 1 }); this.setState({ demo: this.state.demo + 1 });

}
// demo + 2
handleAsyncStateChange = () => {
this.setState((preState,preProps) => {
return {
demo: preState.demo + 1
}
});
this.setState((preState,preProps) => {
return {
demo: preState.demo + 1
}
});
}

refs

Async Nature Of setState

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐