首页 > 解决方案 > 如何知道它是改变的道具还是 useEffect 中的内部状态

问题描述

我有一个内部状态的组件,我想使用道具更新其初始状态,所以我也必须观察道具。但是我想知道它的道具何时发生了变化,以便我运行一次与之相关的函数并使其远离内部组件状态。\

这是因为我无法正确更新内部状态,因为每次触发 useEffect 时该东西都会运行

以下 useEffect 用于我设置为可见或不从父组件状态(因此它始终安装)的模态。

useEffect(() => {
    // I want to run the following once
    if (Object.getOwnPropertyNames(propState).length !== 0) {
      console.log(propState);
      setState(()=> {
       innerState = propState.user_name
      });
      
    }
  }, [propState, innerState]);

标签: javascriptreactjs

解决方案


您可以检查内部状态和 propState 中的值。如果它们相等,则在跳过 setState 时。

useEffect(() => {
    if (propState?.user_name && propState !== innerState.user_name) {
      setState(()=> {
       innerState = propState.user_name
      });
      
    }
  }, [propState, innerState]);

推荐阅读