如果给定的
useEffect
(或依赖项)发生变化,如何再次触发useRedirect
自定义挂钩中的deps
?
代码:
const OnboardingLayout = () => {
const { user } = useUserContext()
useRedirect("/c", () => {
if (user) {
Object.values(user.onboarding).every(e => e)
}
}, [user])
return (
<Outlet />
)
}
export const useRedirect = (path, validator = () => true, deps = []) => {
const navigate = useNavigate()
useEffect(() => {
if (validator()) {
navigate(path)
}
}, [path, navigate, validator, ...deps])
}
useRedirect
中的OnboardingLayout
未按预期工作,因为如果user
对象现在为真(来自null
),则useEffect
自定义挂钩中的useRedirect
不会再次触发,即使我已经通过了一种依赖。另外,在 deps
中传播 useEffect
会给我来自 eslint 的警告,其中显示:“React Hook useEffect 在其依赖项数组中有一个 spread 元素。这意味着我们无法静态验证您是否传递了正确的依赖项.”.
快速浏览一下,您的逻辑看起来不错,只是您的
validator()
实现永远不会返回除
undefined
之外的任何内容。怎么样
useRedirect("/c", () => {
return user && Object.values(user.onboarding).every(e => e);
}, [user])
相反?