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;

```

那只能useEffect 里 能拿到

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

看下这篇博客,也许你就懂了,链接:React中setState什么时候是同步的,什么时候是异步的?