生命周期发生变化更新state

来源:3-14 【异步处理】setState的异步开发

Zhang_Kyra

2021-06-20

老师,您好,还是不理解“生命周期发生变化的时候”更新state。为什么执行第一个回调的时候生命周期发生变化,state变为1.第二个生命周期却没有边变化。怎样理解生命周期变化?
this.setState({ count: this.state.count + 1 }, () => {
console.log("console from callback: " + this.state.count);
});
this.setState({ count: this.state.count + 1 }, () => {
console.log("console from callback: " + this.state.count);
});

写回答

1回答

阿莱克斯刘

2021-06-22

1. this.setState({ count: this.state.count + 1 }, () => {
2    console.log("console from callback: " + this.state.count);
3. });
4. this.setState({ count: this.state.count + 1 }, () => {
5.    console.log("console from callback: " + this.state.count);
6. });

7. console.log(this.state)

如果运行代码,你就会发现代码的执行顺序并不是按照1、2、3、4、5、6来执行的。他的顺序很奇怪,首先会执行1、2、3、4,然后跳过5、6直接执行7,最后再执行5、6。也就是说,在第二次state + 1之前我们的第七行代码就执行了,所以state明明应该是2,但是我们看到的输出依然是1。

因为代码的执行顺序与书写的顺序不一致,这就形成了异步的执行顺序。这也就是“为什么执行第一个回调的时候生命周期发生变化,state变为1.第二个生命周期却没有边变化。”。从本质上来说,你观察到的现象与生命周期变化没啥关系,根本原因是this.setState()通过异步处理state更新,所以导致我们看到了一些比较奇怪的现象。而这个现象也就是本节课的标题“setState的异步开发”。

0
0

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

1993 学习 · 1015 问题

查看课程