笔记二十五、React中setState是同步还是异步的?

在react18版本之前setState既可以是同步也可以是异步的

在Promise的状态更新、js原生事件、定时器中是同步的

在react的合成事件中,是异步的

在react18版本之后是setState异步的

代码

javascript 复制代码
import React, {Component} from 'react';

class Async extends Component {

    state = {count: 0}

    add = () => {
        // {count: this.state.count + 1}
        this.setState(() => ({count: this.state.count + 1}), () => {
            // 回调函数 获取更新的 state 值
            console.log('更新之后的值:', this.state.count)
        });
        console.log("更新前打印的值:", this.state.count)
    }

    render() {
        return (
            <div>
                <h2>{this.state.count}</h2>
                <button onClick={this.add}>增加</button>
            </div>
        );
    }
}

export default Async;

如何拿到setstate更新的值

javascript 复制代码
this.setState({ counte: this.state.counte + 1 }, () => {
  console.log("更新后的值:", this.state.counte);
});

函数写法

javascript 复制代码
this.setState(
  () => ({ counte: this.state.counte + 1 }),
  () => {console.log("更新后的值:", this.state.counte)}
);
相关推荐
Jonathan Star5 分钟前
CSS margin 折叠现象的实际代码示例
javascript·css·css3
咚咚咚小柒10 分钟前
【前端】Webpack相关(长期更新)
前端·javascript·webpack·前端框架·node.js·vue·scss
一路向前的月光21 分钟前
uniapp(5)滚动列表scroll-view
前端·javascript·uni-app
_dindong29 分钟前
牛客101:递归/回溯
数据结构·c++·笔记·学习·算法·leetcode·深度优先
Hilaku1 小时前
就因为package.json里少了个^号,我们公司赔了客户十万块
前端·javascript·npm
**蓝桉**1 小时前
服务器管理
linux·笔记
lingggggaaaa1 小时前
小迪安全v2023学习笔记(一百四十三讲)—— Win系统权限提升篇&AD内网域控&NetLogon&ADCS&PAC&KDC&CVE漏洞
windows·笔记·学习·安全·内网安全·权限提升
秋子aria1 小时前
模块的原理及使用
前端·javascript
71-31 小时前
牛客上的练习题——打印X形图案(有说明scanf返回值)
c语言·笔记·学习
爱加班的猫1 小时前
深入理解防抖与节流
前端·javascript