相关疑难解决方法(0)

使用useEffect,如何跳过对初始渲染应用效果?

使用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跳过初始渲染的效果?

reactjs react-hooks

28
推荐指数
7
解决办法
1万
查看次数

有多个 useEffect 时跳过第一个 useEffect

要限制 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)

reactjs react-hooks

6
推荐指数
1
解决办法
9010
查看次数

标签 统计

react-hooks ×2

reactjs ×2