[英]React hooks : useMemo and useEffect has a Missing dependency when we are trying to call a function
triggerData
函数用于多个函数。 因此,如果我将函数放在useEffect
以避免丢失依赖项,那么我不能在triggerData
之外调用useEffect
即buildData
如何避免丢失依赖项错误?
useEffect(()=>{
//api call
if(something){
triggerData(state, props);
}
}[values]);
const triggerData = (state, props) => {
return values + 1;
}
const buildData = () => {
triggerData(state, props);
}
React Hook useEffect 缺少依赖项:'triggerData'。 包括它或删除依赖数组 react-hooks/exhaustive-deps
当我在triggerData
中添加triggerData
时, useEffect
以下错误。 triggerData
在定义之前被使用 no-use-before-define
useEffect(()=>{
//api call
const triggerData = (values) => {
return values + 1;
}
if(something){
triggerData(values);
}
}[values, triggerData]);
const buildData = () => {
triggerData(values);
}
如果您只在钩子内使用triggerData
,那么我更喜欢在useEffect
钩子内声明函数。 喜欢:
useEffect(()=>{
//api call
const triggerData = (values) => {
return values + 1;
}
if(something){
triggerData(values);
}
}, [values]);
你错过了一些东西。 我们在钩子内声明triggerData
并将其传递给useEffect
这就是为什么它抱怨函数已经声明。
如果你真的想声明triggerData
外useEffect
使用它在其他地方,你可以做这样的:
useEffect(()=>{
//api call
if(something){
triggerData(state, props);
}
}, [values, triggerData]);
const triggerData = useCallback((state, props) => {
return values + 1;
}, [state, props]);
const buildData = () => {
triggerData(state, props);
}
在使用中useCallback
提供准确的参数以根据场景最小化调用它。 假设您正在从triggerData
state 访问value
。 然后你可以传递state.value
而不是整个state
。
希望这对你有用。
如果您想在 useEffect 之外使用 triggerData,您可以使用另一个名为 useCallback 的钩子。
您不需要传递 props 和 state 来运行,因为它可以从父级的范围中使用。
const triggerData = useCallback(() => {
return values + 1;
}, [ /* pass required depedencies here */])
useEffect(()=>{
//api call
if(something){
triggerData(); // don't pass state and props here
}
}[values, triggerData]);
const buildData = () => {
triggerData(); // dont pass state and props here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.