深入掌握 react的 setState的工作机制
程序员文章站
2022-04-09 22:01:39
react 是单向数据流,若想要改变已有组件的外观,我们只能通过更改组件的 props 或者更新组件的 state。在 react 项目的代码中我们操作最多的就是 this...
react 是单向数据流,若想要改变已有组件的外观,我们只能通过更改组件的 props 或者更新组件的 state。在 react 项目的代码中我们操作最多的就是 this.setstate 方法。下面对 setstate 方法进行详细的说明。
<!--more -->
setstate要点:react 框架为了提高性能,会对 state 的更新进行收集、合并、再进行一次批量的状态更新。这种机制常常导致一些意想不到的情况。
setstate 有两种调用形式:
向 setstate 传递对象
setstate()并不会立即触发 state 的更新。
//this.state.demo = 1; handleclick = () => { this.setstate({demo: 2}); console.log(this.state.demo);// 1 }
1、????注意:在 addeventlistener、settimeout、ajax 回调中 this.setstate 是立即触发的。
2、setstate 会合并更新,可能会造成状态更新的丢失
handleclick = () => { 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)
this.setstate((previousstate, currentprops) => { return { ...previousstate, foo: currentprops.bar }; });
该语法和直接为 setstate 传递对象不同,不会合并更新。
// demo + 1 handlesyncstatechange = () => { 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
深入掌握 react的 setState的工作机制
-
深入理解PHP之:Nginx 与 FPM 的工作机制
-
深入理解PHP之:Nginx 与 FPM 的工作机制 nginx apache nginx php nginx rewrite
-
React下setState机制的简单介绍
-
深入理解PHP之:Nginx 与 FPM 的工作机制 nginx apache nginx php nginx rewrite
-
深入掌握 react的 setState的工作机制
-
深入理解PHP之:Nginx 与 FPM 的工作机制
-
React下setState机制的简单介绍
-
深入了解React中setState的更新机制
-
深入了解React中setState的更新机制