一个 dom元素高度监听 Hook
# 使用
监听 dom 元素的高度变更,主要是用于页面元素里面的表格的高度设置,这样可以即使用户改变了浏览器窗口大小,也可以实时的更新高度,让表格铺满整个表格容器 dom
# 实现代码
点击 展开/收起 jsx 代码
/**
* @des 自定义Hook,根据传入的classname返回对应DOM元素的高度。
*/
import { useState, useEffect } from 'react';
import _ from 'lodash';
/**
* @param {string} className - 要获取高度的DOM元素的classname。
* @return {number} - DOM元素的高度。
*/
function useElementHeight(className, show = true) {
const [height, setHeight] = useState(0);
useEffect(() => {
// 查找DOM元素
const element = _.isString(className)
? document.querySelector(`.${className}`)
: className;
if (element) {
// 获取并设置元素高度
const elementHeight = element.offsetHeight;
setHeight(elementHeight);
}
// 创建一个函数来响应窗口大小的变化
const handleResize = () => {
if (element) {
const updatedHeight = element.offsetHeight;
setHeight(updatedHeight);
}
};
// 添加窗口大小变化监听器
window.addEventListener('resize', handleResize);
// 组件卸载时移除事件监听器
return () => {
window.removeEventListener('resize', handleResize);
};
}, [className, show]); // 依赖项列表中包括className,以便于className变化时重新执行
return height;
}
export default useElementHeight;