Javascript React Hook USEFFECT缺少deps

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组件中。不确定如何处理方法返回的值。从示例代码中不清楚 首先是关于添加依赖项数组后的第二个错误-这两个函数在每次渲染时都会重新声明。因

我正在使用一个useEffect钩子,并且得到一个编译器错误,说
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中列出。