我知道React可以异步和批量执行状态更新以进行性能优化.因此,在调用之后,您永远不能相信要更新的状态setState.但是你可以信任的反应更新相同的顺序状态setState被称为对
考虑单击以下示例中的按钮:
1.是否有可能a是假的,b对于:
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { a: false, b: false };
}
render() {
return <Button onClick={this.handleClick}/>
}
handleClick = () => {
this.setState({ a: true });
this.setState({ b: true });
}
}
Run Code Online (Sandbox Code Playgroud)
2.是否有可能a是假的,b对于:
class SuperContainer extends React.Component {
constructor(props) {
super(props);
this.state = { a: false };
}
render() {
return <Container setParentState={this.setState.bind(this)}/>
}
}
class Container …Run Code Online (Sandbox Code Playgroud) useLayoutEffect 的文档说:
在浏览器有机会绘制之前, useLayoutEffect 内计划的更新将同步刷新。
useEffect 的文档说:
与 componentDidMount 和 componentDidUpdate 不同,传递给 useEffect 的函数在布局和绘制之后,在延迟事件期间触发。
React 如何检查布局和绘制何时发生以及何时是调用 useEffect 的正确时间?我经常在这种情况下使用 setTimeout 0 的一种技巧,但我有兴趣了解 React 如何实现这一点?(设置超时,请求动画帧?)