我创建了一个钩子,该钩子可以帮助我在下拉菜单本身之外单击时关闭自定义下拉菜单元素(进行非选择)。
钩子接受一个回调,以及对元素本身的引用,该元素假定在检测到这种交互时便运行。
问题: 触发mousedown,挂钩正常运行,但在运行回调时不使用当前状态。它使用旧状态。
解决方法/ Hack?: 解决方法当然是“不”检查以前的状态,或者使用状态回调为我提供最新状态。但是,这仍然是出乎意料的,并且代码在呈现给浏览器时也可以正常工作。 所以我试图了解这里发生了什么。
有什么建议吗?
我尝试过的其他东西:
useCallback
useRef
,设置ref.current = callback
setShouldShow((oldState) => {newState})
-可以吗?但是有效setShouldShow(false)
-可行,但我应该能够检查状态。 __tests__/hook.js
https://codesandbox.io/s/react-testing-library-examples-kupt7
想法:https://overreacted.io/making-setinterval-declarative-with-react-hooks/
更新后的代码:https://codesandbox.io/s/react-testing-library-examples-id8l3