我对useEffect
有一个迷惑。我注意到useEffect
的运行次数没有超过两次,因为在一个rerender
调用了不同的数据之后,后续的调用不会获得更新的数据。
export default function(lookForUsername) {
const [dashboardHref, setDashboardHref] = useState(`https://www.example.com/`);
useEffect(() => {
// this is where I have code that i want to
// run on re-render, but it won't because it stops getting updated
}, [lookForUsername]);
return [dashboardHref];
}
我的测试有这种情况
// this will log false, false on first run
const { rerender, waitForNextUpdate } = renderHook((lookForUsername=false, otherOption=false) => {
console.log(lookForUsername, otherOption);
return useMyHook(lookForUsername);
});
console.log('first re-render');
// this will make the console say true, false
rerender(true, true);
console.log('second re-render');
// console will still say true, false
rerender(false, false);
console.log('third re-render');
// console will stay true, false (so it's not just one behind)
rerender(true, true);
我不明白为什么第一次使用不同的值进行重新渲染会在renderHook中第一次更新道具,但随后的一次却不更新。
注意 我更新了标题和问题的措词,以便在进行更多调试后更好地反映问题
更新 我简化了我的例子。我最初在这篇文章中只传递了一个参数,但是问题是当我传递多个参数时
答案 0 :(得分:1)
打算提供答案,但是如果Mike Peyper发表,我会把他标记为解决方案,因为他在https://github.com/mpeyper/react-hooks-testing-library/issues/75上给了我。
引用:
由于仅传递了第一个参数,因此无法正常工作 直到钩子回调。通常你会用 多个键并在回调中对其进行销毁:
const { rerender } = renderHook(({ a, b, c }) => useSomeHook(a, b, c))
rerender({ a, b, c})
这样做的原因是应该模仿 包装组件的道具。