【发布时间】:2021-06-06 18:31:00
【问题描述】:
我的应用程序有一个 userService,它公开了一个带有 API 函数的 useUserService 钩子,例如 getUser、getUsers 等。我为此使用了一个钩子,因为 API 调用需要来自我的会话状态的信息,它由 React Context Provider 提供。
将getUsers 函数提供给useEffect 调用会使react-hooks/exhaustive-deps eslint 规则不愉快,因为它希望将getUsers 函数列为dep - 但是,将其列为dep 会导致效果在一个无限循环,因为每次重新渲染组件时,它都会重新运行useUserService钩子,从而重新创建getUsers函数。
这可以通过将函数包装在 useCallback 中来解决,但随后 useCallback 依赖数组会遇到类似的 lint 规则。我想我一定是在这里做错了,因为我无法想象我应该将这些函数中的每一个都包含在 useCallback() 中。
我已经在 Codesandbox 中重现了这个问题。
1:遇到eslint警告:https://codesandbox.io/s/usecallback-lint-part-1-76bcf?file=/src/useFetch.ts
2:通过在useCallback 中喷洒来解决eslint 警告,导致另一个eslint 警告:https://codesandbox.io/s/usecallback-lint-part-2-uwhhf?file=/src/App.js
3:解决那个 eslint规则通过深入:https://codesandbox.io/s/usecallback-lint-part-3-6wfwj?file=/src/apiService.ts
如果我忽略 lint 警告,一切都会正常工作...但我应该这样做吗?
【问题讨论】:
-
禁用函数规则将 100% 导致错误,只要您从 props 中读取或在传递函数时“在路上”的某处状态。查看我的回复。
标签: reactjs react-hooks