我希望 useEffect 仅在道具更改时运行。不在初始运行[重复]

Posted

技术标签:

【中文标题】我希望 useEffect 仅在道具更改时运行。不在初始运行[重复]【英文标题】:i want the useEffect to run only when the props is changed. not on initial run [duplicate] 【发布时间】:2022-01-18 23:37:01 【问题描述】:

在下面的代码中,当组件加载时,useEffect 将加载状态更改为 true

  let [loaded, setLoaded] = useState(false);
  console.log(props.result.meanings);

  useEffect(() => 
    setLoaded(true);
  , [props.result]);

if (loaded)  \\ the rest of the code

这将导致问题,因为它进入了一个 if 条件,其中 props 值尚未从父组件中分配。

【问题讨论】:

你可以使用 useEffect 中的 if 条件来检查 props 是否包含某个值。 【参考方案1】:

我设法通过简单地创建一个条件来解决这个问题:if (props.result) 。 这样,只有当 props 不为 null 并且实际上从父组件接收到值时,它才是 true。

我完全删除了 useEffect。在那种情况下,似乎没有必要,而且问题可以通过更简单的方法解决。感谢您的回复。

【讨论】:

以上是关于我希望 useEffect 仅在道具更改时运行。不在初始运行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

React Hooks:确保 useEffect 仅在自定义钩子的数组参数内容更改时运行的惯用方法

useEffect 和上下文 api

React useEffect 不会在路由更改时触发

反应父母对孩子道具传递而不重新渲染

停止在挂载上运行 useEffect

仅在 useEffect 之后使用数据