我的eslint正在抱怨react-hooks/exhaustive-deps
。我没有做错任何事情,函数应该只在pathname
更改时运行:
const pathname = usePathname();
useEffect(() => {
setNavigation(
navigation.map((item) => ({
...item,
current:
item.href.toLowerCase() === pathname?.substring(3).toLowerCase()
}))
);
}, [pathname]);
我是否应该在该函数上使用eslint-disable-next-line react-hooks/exhaustive-deps
禁用lint?
谢谢!
1条答案
按热度按时间rdrgkggo1#
Eslint的想法是,在依赖项中包含任何在
useEffect
外部定义的变量,并且在useEffect
内部使用,所以回调中总是包含它们最近的值。在您的示例中,要始终使用
navigation
的最新值,并且只在pathname
发生变化时才运行useEffect
,可以使用函数updater:这样,您就不会从外部使用
navigation
,而是使用React将给予给状态设置器的值,确保它始终是一个新值。边注:通常,禁用lint不是一个好主意,因为它可能会导致bug。