在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 两个setState,调用几次?如下代码所示, 当点击按钮时, 答案:都是 state = { count: 0 }; handleClick = () => { this.setState({ count: this.state.count + 1 }); this.setState({ count: this.state.count + 1 }); }; render() { console.log(`render`); return ( <> <div>当前计数:{this.state.count}</div> <button onClick={this.handleClick}>add</button> </> ); } 按照常理来说,第一次点击按钮时,由于执行了两次两次 以上代码放到浏览器运行一下即可: 最开始时,页面显示 原因在于,React 内部将同一事件响应函数中的多个 这也就解释了上述代码,为什么最后 2. 两个setState,调用的是哪一个?但上述代码没有验证,React 合并后,到底执行的是哪一次 state = { count: 0 }; handleClick = () => { this.setState({ count: this.state.count + 1 }); this.setState({ count: this.state.count + 2 }); // 改为+2 }; render() { console.log(`render`); return ( <> <div>当前计数:{this.state.count}</div> <button onClick={this.handleClick}>add</button> </> ); } 再次放到浏览器中执行: 结果显示,点击按钮后, 3. 两个setState放在setTimeout中?若在点击事件函数中,添加一个定时器 state = { count: 0 }; handleClick = () => { setTimeout(() => { this.setState({ count: this.state.count + 1 }); this.setState({ count: this.state.count + 2 }); }, 0); }; render() { console.log(`render`); return ( <> <div>当前计数:{this.state.count}</div> <button onClick={this.handleClick}>add</button> </> ); } 运行结果: 结果显示,点击按钮后, 这是因为在 React 的合成事件和生命周期函数中直接调用 4. 总结在 React 中直接使用的事件,如 React 对于合成事件和生命周期函数,有一套性能优化机制,会合并多个 若越过 React 的性能优化机制,在原生事件、 到此这篇关于浅谈React多个setState会调用几次的文章就介绍到这了,更多相关浅谈React多个setState会调用几次内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论