使用React的新效果钩子,如果重新渲染之间某些值没有改变,我可以告诉React跳过应用效果 - 来自React的文档示例:
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes
Run Code Online (Sandbox Code Playgroud)
但是上面的例子应用了初始渲染时的效果,以及后续重新渲染的位置count.如何告诉React跳过初始渲染的效果?
要限制 useEffect 在第一次渲染时运行,我们可以执行以下操作:
const isFirstRun = useRef(true);
useEffect (() => {
if (isFirstRun.current) {
isFirstRun.current = false;
return;
}
console.log("Effect was run");
});
Run Code Online (Sandbox Code Playgroud)
根据这里的例子:https : //stackoverflow.com/a/53351556/3102993
但是如果我的组件有多个 useEffects,每个 useEffects 处理不同的 useState 变化怎么办?我试过isFirstRun.current在另一个 useEffect 中使用逻辑,但由于一个返回,另一个仍然在初始渲染上运行。
一些背景:
const Comp = () => {
const [ amount, setAmount ] = useState(props.Item ? Item.Val : 0);
const [ type, setType ] = useState(props.Item ? Item.Type : "Type1");
useEffect(() => {
props.OnAmountChange(amount);
}, [amount]);
useEffect(() => {
props.OnTypeChange(type);
}, [type]);
return { …Run Code Online (Sandbox Code Playgroud)