【发布时间】:2020-05-11 09:23:50
【问题描述】:
我需要访问 useEffect 中的变量,但只有在其中一些更新时才触发该方法。
例如:
我想在data 更改时调用useEffect,但在saveTimeout 或saveMethod 更改时不调用。
以同样的方式,我想在我的组件卸载时调用 saveMethod,但我不能,因为它需要在依赖数组中,因此在每次更改 saveMethod 时调用它。
function SavingComponent({data, apiInfo}){
[saveTimeout, setSaveTimeout] = useState(null);
const saveMethod = useCallBack(()=>{
clearTimeout(saveTimeout);
// api call to save the data using apiInfo
}, [data, saveTimeout, apiInfo])
// Start a timer to save the data 2 seconds after it is changed (not working)
useEffect(()=>{
clearTimeout(saveTimeout);
setSaveTimeout(setTimeout(saveMethod, 2000));
}, [data, saveTimeout, saveMethod]);
// Save immediately on dismount only (not working)
useEffect(()=>{
return ()=> { saveMethod(); }
},[saveMethod])
return (// some rendering)
}
这是我在其他情况下经常遇到的问题,并且不得不解决。通常使用自定义的usePrevious 方法。如果我感兴趣的道具没有改变,我会将道具的先前值与当前值进行比较并立即返回。
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
只有在某些依赖项更新时才调用useEffect 的正确方法是什么?
【问题讨论】: