我有一个自定义钩子,它获取一个回调作为其中一个参数,并在useEffect
中调用它
const customHook = (callback: Function) => {
...
useEffect(() => {
if (something) {
callback();
}
}, [other things, callback]);
return {values}
}
这里的问题是,callback
是一个函数,它导致useEffect
在循环中运行。EsLint建议在父组件中使用useCallback
。因此,我决定将这个callback
包装在一个useCallback
中,我将其命名为customHook
。
因此,在我的组件中会有类似这样的内容:
const memoizedCallback = useCallback(() => {
myFunction(values);
}, [values, myFunction]);
const { values } = customHook(memoizedCallback);
在这里我有我的问题-从customHook
返回myFunction
的依赖项,并且在它们定义之前我不能使用它们。但出于同样的原因,我也不能将memoizedCallback
放在customHook
调用之后。
现在我被困在这个无限的依赖循环中,我不确定如何解决这个问题,即使是以某种方式,而不是忽略eslint警告。
因此,任何想法和解决方案都将非常受欢迎:)
发布于 2021-04-01 18:35:19
如果更改回调不会导致执行useEffect
块,请将callback
设置为ref:
const customHook = (callback: Function) => {
const fn = useRef(callback);
...
useEffect(() => {
fn.current = callback;
})
useEffect(() => {
if (something) {
fn.current(); // fn.current?.() if fn.current might be undefined
}
}, [something]);
return {values}
}
https://stackoverflow.com/questions/66909437
复制相似问题