为何自定义Hook中useRef的current值无法共享?滚动高度获取异常
问题原因分析
一、useRef版本失效的原因
- useRef不触发组件重渲染:useRef的
current属性更新时,React不会触发组件重新渲染。你的Hook首次执行时返回scrollHeight.current的初始值0,后续滚动时current值确实会更新,但组件不会重新执行Hook去读取新值,导致外部组件始终拿到的是旧值。 - 监听清理逻辑错误:useEffect的清理函数中,你移除的是一个全新的空函数
() => {},而非绑定的scroll函数,这会导致滚动监听无法被正确移除,既存在内存泄漏风险,还可能引发重复监听问题。
二、useState版本引发大量重渲染的原因
useState的状态更新会强制触发组件及子组件的重新渲染,而滚动事件的触发频率极高(几乎每滚动一帧就会触发一次),每次滚动调用setState都会让使用该Hook的组件重新渲染,自然会产生大量不必要的重渲染。
内容的提问来源于stack exchange,提问作者Arijit
相关产品推荐
相关产品推荐

