为什么重新运行只用一次react-hooks-testing-libary更新道具?

时间:2019-05-16 19:28:14

标签: reactjs react-hooks react-hooks-testing-library

我对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中第一次更新道具,但随后的一次却不更新。

注意 我更新了标题和问题的措词,以便在进行更多调试后更好地反映问题

更新 我简化了我的例子。我最初在这篇文章中只传递了一个参数,但是问题是当我传递多个参数时

1 个答案:

答案 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}) 
  

这样做的原因是应该模仿   包装组件的道具。