如何让 useEffect 像 ComponentDidUpdate 一样快速响应 props 变化?
How to make useEffect react on props change as fast as ComponentDidUpdate?
在以下情况下更新 isLoading 属性时,rotateLogo() 会立即触发:
class Logo extends Component {
constructor(props) {
super(props);
};
}
componentDidUpdate() {
if (this.props.isLoading) {
this.rotateLogo();
}
}
...
但是,当尝试使用 useEffect 在功能组件中实现相同功能时,isLoading 的更新和更新之间存在相当大的延迟
rotateLogo()
的激活
const Logo = ({ isLoading }) => {
useEffect(() => {
if (isLoading) {
rotateLogo();
}
}, [isLoading])
...
在这种情况下,您可能希望同步重新渲染,因此您应该使用 useLayoutEffect
而不是 useEffect
:https://reactjs.org/docs/hooks-reference.html#uselayouteffect
在以下情况下更新 isLoading 属性时,rotateLogo() 会立即触发:
class Logo extends Component {
constructor(props) {
super(props);
};
}
componentDidUpdate() {
if (this.props.isLoading) {
this.rotateLogo();
}
}
...
但是,当尝试使用 useEffect 在功能组件中实现相同功能时,isLoading 的更新和更新之间存在相当大的延迟 rotateLogo()
的激活const Logo = ({ isLoading }) => {
useEffect(() => {
if (isLoading) {
rotateLogo();
}
}, [isLoading])
...
在这种情况下,您可能希望同步重新渲染,因此您应该使用 useLayoutEffect
而不是 useEffect
:https://reactjs.org/docs/hooks-reference.html#uselayouteffect