示例:在获取指定元素的高度时,始终打印为0
原因:可能是页面渲染过慢,造成offsetHeight(offsetWidth、clientHeight…)等属性渲染不及时

const { useState, useRef } from 'react'const [height, setHeight] = useState(0) // 元素的高
const divRef = useRef() // 定义绑定到元素上的ref对象
const heightRef = useRef(0) // 记录绑定ref的元素高度<div ref={divRef}>......
</div>

解决方法有两种
1 使用useEffect监听offsetHeight属性的改变,然后赋值

useEffect(() => {setHeight(divRef.current?.offsetHeight)
}, [divRef.current?.offsetHeight])

2 使用计时器监听offsetHeight,有改变即重新赋值

useEffect(() => {const timer = setInterval(() => {// offsetHeight没有改变终止当前循环if (heightRe.current === divRef.current?.offsetHeight) return// offsetHeight改变时,重新赋值heightRe.current = divRef.current?.offsetHeightsetHeight(divRef.current?.offsetHeight)}, 300)return () => { // 离开页面时,卸载计时器clearInterval(timer)}
}, [])

结论:
推荐使用第二种计时器方法,因为使用useEffect对一个复杂对象监听时,效果可能不太理想

获取元素属性(offsetHeight、clientHeight...)无效相关推荐

  1. JS获取元素属性和自定义属性

    昨天有同事问我,怎么获取自定义元素的属性,我意识到这个确实是个 问题,所有总结一下自己的心得. 获取元素的属性分为两种类型: 1-获取元素常见的属性(class,id,type,value-) 2-获 ...

  2. Selenium自动化测试-7.获取元素属性信息

    ------·今天距2020年76天·------ 这是ITester软件测试小栈第60次推文 大家好 我是vivi小胖虎 做自动化测试 往往避免不了 获取元素信息 获取元素属性 获取元素状态 今天就 ...

  3. 原生js获取html元素属性,JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性)...

    JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性) 以下内容: 一.获取元素的属性 二.设置元素的属性 三.删除元素的属性 一.获取元素的属性 1-原生JS 获取属性 .ge ...

  4. JS DOM获取元素属性+操作方法

    JS DOM获取元素属性+操作方法 文章目录 JS DOM获取元素属性+操作方法 基础属性 title属性 tagName属性 : 获取标签名 className属性 : 获取类名 Nodelist. ...

  5. js获取元素属性及事件

    一.HTML中元素属性 1.offsetLeft :返回当前元素左边界到它上级元素的左边界的距离,只读属性: 注意: 获取的是( left 值 + 本身margin的值) 2.offsetTop   ...

  6. DOM常用几种获取元素属性方式

    1.DOM 提供的方法(API)获取 1.1 H5新增获取元素方式 document.getElementsByClassName 根据类名获得某些元素集合 document.querySelecto ...

  7. 原生JS获取元素属性值

    方法一 第一步 我们要获取到元素(比如用ID),不可以是类数组(比如用class),类数组除了有一些数组的基本特征不可以使用其他方法,你会报错的 第二步 目标元素必须设置position为absolu ...

  8. java dom获取命名空间属性_Java DOM XML解析::获取元素属性值

    如何从元素中提取属性值.我的xml节点是这样写的 &LT nodename attribute ="value">我需要将其解压缩以将其与另一个字符串进行比较. 但由 ...

  9. JS备忘--子父页面获取元素属性、显示时间,iframe之间互相调用函数

    //页面加载完成后执行$(function() { getHW();});//当用户改变浏览器大小改变时触发$(window).resize(function() { setHW(); });//每5 ...

  10. airtest-poco获取元素属性值attr

    poco有直接获取属性的接口get_text,get_name.有时我们想获取其他的属性值,这时就需要用到attr(),我用个实际的场景示范下,比如,我想获取qq头像框的visible属性值 代码: ...

最新文章

  1. zabbix_get 命令介绍
  2. python函数count_python中count函数知识点浅析
  3. 关于Jakarta EE与MicroProfile的创新和关系的提案
  4. jpa 自定义sql if_跟飞哥学编程:SQL入门-:函数、存储过程和触发器
  5. SpringMVC接收哪些类型参数参数
  6. CORS跨域漏洞的学习(防止CSRF漏洞导致的漏洞)
  7. Android 平台架构
  8. I/O端口及其寻址方式
  9. RDLC报表速成指南
  10. 六大设计原则之SRP
  11. 5G无线网络CU/DU分离架构
  12. fastadmin 多表关联查询
  13. 人工智能区块链智能合约_通过业务规则使您的区块链智能合约更智能
  14. Unity3D——打飞碟游戏(2)
  15. Ubuntu Firefox浏览器安装Flash插件
  16. 泰国80亿互联网记录数据库泄漏,疑遭黑客攻击
  17. FVCOM离线拉格朗日配置
  18. pyautogui实现微信自动回复和其他功能
  19. ESP8266 上电 boot 模式
  20. 集合竞价如何买入_股票买入技巧:如何进行集合竞价?

热门文章

  1. Dubbo视频教程(Dubbo项目实战)
  2. Tomcat导入J2EE项目教程
  3. SoapUI接口测试实战
  4. Web安全扫描器Netsparker v3.5发布
  5. 简单html倒计时器代码,js简单倒计时实现代码
  6. “耐撕”团队第一次讨论——“抢答器”需求分析
  7. 大小端及转换(C++)
  8. padavan固件如何设置打印机
  9. IGBT的绘制与逆变器的绘制-Visio制图总结【电控类】(三)
  10. 商业计划书范文3000_餐厅 餐饮 饭店项目商业计划书模板范文