在JEST \ React-testing-library中运行时,React Hook回调使用旧状态

时间:2019-11-18 13:13:15

标签: reactjs jestjs react-testing-library

我创建了一个钩子,该钩子可以帮助我在下拉菜单本身之外单击时关闭自定义下拉菜单元素(进行非选择)。

钩子接受一个回调,以及对元素本身的引用,该元素假定在检测到这种交互时便运行。

问题: 触发mousedown,挂钩正常运行,但在运行回调时不使用当前状态。它使用旧状态。

解决方法/ Hack?: 解决方法当然是“不”检查以前的状态,或者使用状态回调为我提供最新状态。但是,这仍然是出乎意料的,并且代码在呈现给浏览器时也可以正常工作。 所以我试图了解这里发生了什么。

有什么建议吗?

我尝试过的其他东西:

  • 使用useCallback
  • 使用useRef,设置ref.current = callback
  • 使用setShouldShow((oldState) => {newState})-可以吗?但是有效
  • 无条件使用setShouldShow(false)-可行,但我应该能够检查状态。

复制的代码:__tests__/hook.js

https://codesandbox.io/s/react-testing-library-examples-kupt7

丹·阿布拉莫夫(Dan Abramov)推荐的useRef复制代码

想法:https://overreacted.io/making-setinterval-declarative-with-react-hooks/

更新后的代码:https://codesandbox.io/s/react-testing-library-examples-id8l3

0 个答案:

没有答案