React setState useState

112 阅读1分钟

为什么 useState 要使用数组而不是对象?

解构赋值

数组依次排序,可以随便命名

对象不行,没有次序

状态是同步还是异步?

  • React 17 的 legacy 模式 或者更低版本,同步异步要看调用的方式

    • 异步(batchedUpdate)

      • setState 在当前任务中执行
    • state 同步更新

      • 定时器、事件、网络请求类似的异步任务去执行

        • 因为 isBatchingEventUpdate 已经变成了 false

      image.png

  • 在React18之后,默认所有的操作都被放到了批处理中(异步处理)

    1668432810427.png

  • 如果希望代码可以同步拿到,则需要执行特殊的flushSync操作:

    import { flushSync } from "react-dom";
    changeText() {
        flushSync(() => {
          this.setState({
            message: "Hello React",
          });
        });
        console.log(this.state.message); // Hello React
      }
    

链接:juejin.cn/post/716586…