为什么重新运行仅一次使用React-Hooks-testing-libary更新道具



我有一个带有 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中的道具,而不是随后的时间。

注意我已经更新了标题&问题措辞在更多调试后更好地反映问题

更新我过分简化了我的例子。我最初只是在这篇文章中通过一个论点,但是问题是我通过了多个参数

将提供答案,但是如果Mike Peyper帖子,我会将他作为解决方案,因为他在https://github.com/mpeyper/mpeyper/react-hooks--hooks------测试图书馆/问题/75。

引用:

这个无法预期的,因为只通过第一个参数才通过 通过挂钩回调。通常您会通过一个对象 多个键并在回调中破坏它:

const { rerender } = renderHook(({ a, b, c }) => useSomeHook(a, b, c))
rerender({ a, b, c}) 

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

相关内容

  • 没有找到相关文章

最新更新