我有一个内部状态的组件,我想使用道具更新它的初始状态,所以我也必须观察道具。然而,我想知道什么时候它的道具改变了,这样我就可以运行与它相关的函数一次,并保持它远离内部组件状态。
这是因为我无法正确地更新内部状态,因为每当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]);
可以在inner state和propState中检查值。如果它们相等,则跳过setState.
useEffect(() => {
if (propState?.user_name && propState !== innerState.user_name) {
setState(()=> {
innerState = propState.user_name
});
}
}, [propState, innerState]);