reactjs 获取动态列表的dom高度时,不用定时器就不行吗?

bannerItemRef 是一个循环渲染的列表,我想获取这个列表的dom高度,代码如下:

const bannerItemRef = useRef()
  useEffect(() => {
    console.log(bannerItemRef.current.offsetHeight);
  }, [])
const bannerItemRef = useRef()
  useEffect(() => {
      setTimeout(()=>{
        console.log(bannerItemRef.current.offsetHeight);
      },2000)
  }, [])

只有下面这份代码 能获取到正确的高度。 我的问题是除了加上setTimeout外 还有其他好点的办法吗? 请教

阅读 3.6k
2 个回答
新手上路,请多包涵

ResizeObserver

你应该思考为什么加了setTimeout 能获取到,肯定是你动态加载数据有延迟,如果没有setTimeout,有可能此时页面dom还没加载完,所以获取不到,所以我建议你这样写试试

useEffect(() => {

console.log(bannerItemRef.current.offsetHeight);

}, [bannerData.length])

监听下数据变化,这样列表高度应该能拿到

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏