bounty还有7天到期。此问题的答案有资格获得+50声望奖励。dipea希望引起更多关注这个问题。
这是react即将推出的useEffectEvent
钩子的精确polyfill吗?是否存在任何潜在问题?
我不确定的一点是,在返回的函数被用于任何其他效果之前,是否保证ref已经被更新。我认为只要在代码中的其他地方不使用相当深奥的useInsertionEffect
,我在这方面就没问题,但我想确认一下。
function useEffectEvent(callback) {
const fnRef = useRef(null)
useInsertionEffect(() => {
fnRef.current = callback
})
return (...args) => {
return fnRef.current.apply(null, args)
}
}
1条答案
按热度按时间xmjla07d1#
阅读current documentation,您可以将您的方法与另一个polyfill that uses the useEffectEvent principle进行比较:它与您提供的原始polyfill非常相似,唯一的区别是将回调函数立即分配给
ref
:这个polyfill试图通过存储对回调函数的引用并返回调用最新版本回调的函数来模拟
useEffectEvent
的功能。关于你的问题,是否保证
ref
在返回的函数被用于任何其他效果之前已经更新,ref
应该在它被用于其他效果的时候更新,因为refs在效果运行之前的渲染阶段更新。在这两个polyfill中,
ref
在调用返回的函数之前更新,确保使用最新版本的回调。但是,在这两种情况下都需要考虑一些注意事项:
useEffectEvent
的确切语义。它们不会自动“断开”效果的React性与不应是React性的代码之间的“链条”。useInsertionEffect
,除非您正在使用CSS-in-JS库,并且需要一个地方来注入样式。根据React documentation,useInsertionEffect
在任何DOM变化之前触发,主要用于在任何DOM更新发生之前注入样式。因此,这些polyfill并不完美,不能完全模仿即将到来的
useEffectEvent
钩子的行为。