Javascript React Hook USEFFECT缺少deps
我正在使用一个useEffect钩子,并且得到一个编译器错误,说Javascript React Hook USEFFECT缺少deps,javascript,reactjs,react-hooks,use-effect,usecallback,Javascript,Reactjs,React Hooks,Use Effect,Usecallback,我正在使用一个useEffect钩子,并且得到一个编译器错误,说React钩子useEffect缺少依赖项。包括它们或删除依赖项数组react HOOK/DEP 这两种功能都是这样的。我想知道在这个实例中如何使用useCallBack钩子。我没怎么幸运地找到适合它的东西。如果您有任何帮助来消除这些编译器警告,我们将不胜感激 我估计您发布的所有代码都在您的React组件中。不确定如何处理方法返回的值。从示例代码中不清楚 首先是关于添加依赖项数组后的第二个错误-这两个函数在每次渲染时都会重新声明。因
React钩子useEffect缺少依赖项。包括它们或删除依赖项数组react HOOK/DEP
这两种功能都是这样的。我想知道在这个实例中如何使用useCallBack钩子。我没怎么幸运地找到适合它的东西。如果您有任何帮助来消除这些编译器警告,我们将不胜感激 我估计您发布的所有代码都在您的React组件中。不确定如何处理方法返回的值。从示例代码中不清楚 首先是关于添加依赖项数组后的第二个错误-这两个函数在每次渲染时都会重新声明。因此,React认为它们已更改,并将重新运行挂钩。您必须将
积分
和gpa
方法包装在useCallback
中,以避免将数据
作为依赖项
就我个人而言,我会将这两种方法重构为纯函数。这意味着他们将把数据作为函数的参数,而不是从更高的范围中获取数据。然后,如果将它们都包装在useCallback
中,它们将永远不会更改,因为它们之间没有依赖关系。然后将这两个方法与数据一起添加到useffect
hook dependency,一旦数据发生变化,就会计算这两个函数。结果将与oyu将方法包装在useCallback
中的结果相同。但我认为对于纯函数,代码更容易推理。有两个方法需要一些参数,一旦数据发生变化,就运行这些方法来重新计算一些变化
以下是我将如何重构代码:
const credits=useCallback((课程)=>{
设积分=0
课程。forEach((c)=>(
学分+=parseInt(c.courseCredits)
))
如果(isNaN(学分))学分=0
归还信用证
}, []); // {
让分数=0
设积分=0
设cumulativeGpa=0
课程。forEach(c=>{
学分+=parseInt(c.courseCredits)
荣誉分数+=parseFloat(getGradeNumber(c.numericGrade)*c.courseCredits)
累积积分=荣誉积分/学分
})
如果(isNaN(cumulativeGpa))cumulativeGpa=0
返回累计EGPA.toFixed(2)
}, []); // {
学分(数据)
gpa(数据)
},[学分、gpa、数据];// @TomášPustelník是对的,但我有另一个解决方案给你。您可以禁用eslint,例如:
useffect(()=>{
学分()
gpa()
//eslint禁用管线反应挂钩/详尽的deps
},[数据];
+1。由于这些是纯函数,您甚至不需要将它们包装在useCallback
中,也不需要将纯函数作为useffect
的依赖项。但是,如果问题中的内容不止这些,那么这就是解决问题的方法。是的,如果它们是没有任何依赖关系的纯函数,那么最好在组件之外声明它们(然后您也可以在其他组件中重用它们)。然后,它们将始终是相同的,不需要在hook的dependecies中列出。