【发布时间】:2020-07-22 02:44:33
【问题描述】:
考虑以下模式:
const Comp = ({ handler })=> {
// handler is some callback of the form ( ) => void
useSomeHook(handler);
//...
}
function useSomeHook(cb) {
const ref = useRef()
useEffect(() => {
ref.current = cb; // update ref before second useEffect
})
useEffect(() => {
// use the current (most recent) ref value
const iv = setInterval(() => { ref.current() }, 3000)
return () => { clearInterval(iv) };
}, []) // run only after first render
}
问题:我能否相信这样一个事实,即第一个 useEffect总是 执行 之前 第二个 useEffect,所以 ref 已经被执行了更新了吗?
背景:我的意图是避免在Comp (useCallback) 中记住传入的回调并将cb 设置为部门。我特别感兴趣,如果这个可变引用 模式在 React 世界中有效 - 上面只是一个人为的例子。
我想,在阅读a tweet from Dan Abramov 之后,答案应该是明确的“是的!”。不过,following issue 表示:
我们不保证兄弟姐妹的顺序,无论是在组件内还是兄弟姐妹之间。这是因为那里的强保证阻碍了重构。 在组件内,您应该能够重新排序 Hook,尤其是自定义 Hook。
我对上述陈述的解释是否错误 - 或者链接有点矛盾?感谢任何澄清。
PS:我知道linked post。这个问题更多地是关于一般模式、官方文档和提到的矛盾(?)陈述。
谢谢!
【问题讨论】:
-
解决方案可能是这个库:github.com/theKashey/use-callback-ref
标签: reactjs react-hooks