【发布时间】:2019-05-23 11:39:24
【问题描述】:
所以我以为我已经掌握了这些钩子的窍门,但 lint 规则 react-hooks/exhaustive-deps 让我绊倒了。
我的Provider中有这个方法
const onScreenChange = useCallback(
(key, value) => {
const newState = Object.assign({}, screenState, { [key]: value });
localStorage.setItem('screens', JSON.stringify(newState));
setScreenState(newState);
},
[]); // screenState
我允许我的应用程序的其余部分通过将其传递给 value 属性来访问它...
return <Provider value={{onScreenChange, ... }}>children</Provider>
然后我在路由改变时从子组件调用这个方法
useEffect(() => {
if (match.path === `/${screenKey}`) {
onScreenChange(screenKey, 'external');
}
}, [onScreenChange, match.path, screenKey]);
上面的代码完全按照我的意愿工作,我看不出这会导致任何错误。然而 eslint 告诉我:
React Hook useCallback has a missing dependency: 'screenState'. Either include it or remove the dependency array
当我将screenState 添加到数组中时,只要调用onScreenChange 方法就会导致无限循环。
现在循环发生的原因很明显,但我该如何阻止它并“遵守规则”?
提前感谢您的帮助!
【问题讨论】:
标签: javascript reactjs react-hooks