gpt4 book ai didi

reactjs - 停止重新渲染 react 功能组件(使用钩子(Hook))

转载 作者:行者123 更新时间:2023-12-05 06:27:47 25 4
gpt4 key购买 nike

我有一个纯功能组件,我在其中使用 useEffect 获取一些数据。我向 useEffect 传递了一个空字符串,因此它的行为就像一个已挂载的组件

const getData = () => {
setTimeout(() => {
setLocalState({ a: 2 });
setIsLoading(false);
}, 0);
};

useEffect(() => getData(), []);

我的整个组件现在重新渲染两次。我想控制这种行为,并且只在特定条件下重新渲染。

在这里,我希望组件在 setLocalState 设置了 localState 时重新渲染,但在 setIsLoading 设置了 isLoading 为假。

这是针对此问题的代码沙箱: https://codesandbox.io/s/0oyp6j506p

最佳答案

如果我们在基于事件的 react 之外调用多个状态 setter ,将触发多个渲染,但在类组件中,状态更改将被一起批处理。但在长期计划中,这将被修复,其中提到 here

This appears to be normal React behavior. It works the exact same way if you were to call setState() in a class component multiple times.

React currently will batch state updates if they're triggered from within a React-based event, like a button click or input change. It will not batch updates if they're triggered outside of a React event handler, like a setTimeout().

I think there's plans long-term to always batch events, but not sure on the details.

关于reactjs - 停止重新渲染 react 功能组件(使用钩子(Hook)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com