老师怎么实现setState 的同步?

老师怎么实现setState 的同步?

除了老师讲的,setState第二个参数用回调函数;

网上有人提在异步逻辑比如setTimerout里面使用setState、或者在原生dom事件上使用setState,这两种情况下是同步的;

但是setTimerout这种情况我试了一下根本不行,为什么这么多人说这样可行呢?

https://www.jb51.net/article/229017.htm#_label3

class Ee extends React.Component{
  constructor(props) {
     super(props);
    this.state = {count:0};
  }
  componentDidMount() {
    setTimeout(() => {
        this.setState({ count: this.state.count + 1 });
        console.log(this.state.count); // 老师这里还是输出的是0
    }, 0);
  }
  render() {
    return (
        <>
            <div>当前计数:{this.state.count}</div>
            <button>add</button>
        </>
    );
    }

  
}
const root = ReactDOM.createRoot(document.getElementById('root'));

root.render(<Ee/>);

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-08-08 11:43:50

同学你好, 使用React17版本测试,定时器中的setTimeout中的setState是同步的,示例:

https://img1.sycdn.imooc.com//climg/62f0813b09497ad409580485.jpg

猜测同学可能使用的是18.x版本,该版本下setTimeout等确实无法实现setState同步,对于该版本的setState同步问题,老师也还在研究中,同学可以暂时学掌握课程中讲解的内容,等老师找到解决方法了,再通知同学。

祝学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师