心念99 2022-08-26 16:22 采纳率: 50%
浏览 16

React的setState到底在什么情况下才是同步的?

问题遇到的现象和发生背景

我通过查阅资料了解到setState只有在setTimeout或者原生事件里才会同步执行,我测试后在类组件里确实是这样,而在函数组件里就不行了,下面代码打印1和0。在类里面打印1,函数组件打印0

我想在函数组件useState中实现和this.setState的第二个回调参数一样的效果,希望可以set后立刻能读取最新的state,有什么方法呢

问题相关代码,请勿粘贴截图

```javascript

import { useEffect, useState, Component } from "react";

class Demo extends Component {
  state = {
    num: 0,
  };

  componentDidMount() {
    this.setState({ num: num + 1 });

    setTimeout(() => {
      console.log(this.state.num);
    });
  }

  render() {
    return null;
  }
}

const HookDemo = () => {
  const [num, set] = useState(0);

  useEffect(() => {
    set(num + 1);
    setTimeout(() => {
      console.log(num);
    });
  }, []);
  return (
    <>
      <Demo />
    </>
  );
};

export default HookDemo;

```

  • 写回答

2条回答 默认 最新

  • 崽崽的谷雨 2022-08-26 16:39
    关注

    那只能useEffect 里 能拿到

    useEffect(() => {
        },[num])
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月26日

悬赏问题

  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异
  • ¥60 具体分析这篇MVC结构springboot框架的安利代码
  • ¥15 lettuce连接哨兵redis,主从切换异常
  • ¥15 ubuntu出现以下问题
  • ¥15 R语言 survIDINRI包已将生存时间转为数值变量,仍错误 Time variable is not numeric。
  • ¥15 在Starccm中相变材料的物理模型该如何选择?