Javascript 如何获取react.element的高度
我通过映射到一个数组并放置每个元素的HTML标记,动态呈现Javascript 如何获取react.element的高度,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,我通过映射到一个数组并放置每个元素的HTML标记,动态呈现符号(react.element)列表。因此,我的问题是:如何获得每个渲染的符号(react.element)的高度?这似乎不在符号(react.element)的对象中 提前感谢您的帮助类MyComponent扩展组件{ class MyComponent extends Component { constructor(props){ super(props) this.myDiv = Re
符号(react.element)
列表。因此,我的问题是:如何获得每个渲染的符号(react.element)
的高度?这似乎不在符号(react.element)
的对象中
提前感谢您的帮助类MyComponent扩展组件{
class MyComponent extends Component {
constructor(props){
super(props)
this.myDiv = React.createRef()
}
componentDidMount () {
console.log(this.myDiv.current.offsetHeight)
}
render () {
return (
<div ref={this.myDiv}>element</div>
)
}
}
建造师(道具){
超级(道具)
this.myDiv=React.createRef()
}
组件安装(){
console.log(this.myDiv.current.offsetHeight)
}
渲染(){
返回(
要素
)
}
}
类MyComponent扩展组件{
建造师(道具){
超级(道具)
this.myDiv=React.createRef()
}
组件安装(){
console.log(this.myDiv.current.offsetHeight)
}
渲染(){
返回(
要素
)
}
}
实际上,如果您使用的是功能组件,那么最好将此调整大小逻辑隔离在自定义挂钩中,而不是将其留在组件中。您可以创建如下自定义挂钩:
const useResize = (myRef) => {
const [width, setWidth] = useState(0)
const [height, setHeight] = useState(0)
const handleResize = () => {
setWidth(myRef.current.offsetWidth)
setHeight(myRef.current.offsetHeight)
}
useEffect(() => {
myRef.current && myRef.current.addEventListener('resize', handleResize)
return () => {
myRef.current.removeEventListener('resize', handleResize)
}
}, [myRef])
return { width, height }
}
然后你可以像这样使用它:
const MyComponent = () => {
const componentRef = useRef()
const { width, height } = useResize(componentRef)
return (
<div ref={myRef}>
<p>width: {width}px</p>
<p>height: {height}px</p>
<div/>
)
}
constmycomponent=()=>{
常量componentRef=useRef()
const{width,height}=useResize(componentRef)
返回(
宽度:{width}px
高度:{height}px
)
}
实际上,如果您使用的是功能组件,那么最好将此调整大小逻辑隔离在自定义挂钩中,而不是将其留在组件中。您可以创建如下自定义挂钩:
const useResize = (myRef) => {
const [width, setWidth] = useState(0)
const [height, setHeight] = useState(0)
const handleResize = () => {
setWidth(myRef.current.offsetWidth)
setHeight(myRef.current.offsetHeight)
}
useEffect(() => {
myRef.current && myRef.current.addEventListener('resize', handleResize)
return () => {
myRef.current.removeEventListener('resize', handleResize)
}
}, [myRef])
return { width, height }
}
然后你可以像这样使用它:
const MyComponent = () => {
const componentRef = useRef()
const { width, height } = useResize(componentRef)
return (
<div ref={myRef}>
<p>width: {width}px</p>
<p>height: {height}px</p>
<div/>
)
}
constmycomponent=()=>{
常量componentRef=useRef()
const{width,height}=useResize(componentRef)
返回(
宽度:{width}px
高度:{height}px
)
}
const componentRef=useRef(null)
和div ref={componentRef}const componentRef=useRef(null) div ref={componentRef}是Marcos答案的修改版本 我放置了一个渲染布尔,以确保在放置高度和宽度之前渲染所有数据。这是为了确保在计算高度时,所有必需的元素都已就位,而不是冒着接收不正确高度和宽度的风险 UserSize挂钩放置在单独的文件夹中:
从'react'导入{useState,useffect,useCallback};
export const useResize=(myRef:React.MutableRefObject,rendering:boolean)=>{
const[width,setWidth]=useState(0);
const[height,setHeight]=useState(0);
const handleResize=useCallback(()=>{
设置宽度(myRef.current.offsetWidth);
设置高度(myRef.current.offsetHeight);
},[myRef]);
useffect(()=>{
如果(!渲染){
myRef.current&&myRef.current.addEventListener('resize',
handleResize(),{once:true});
}
},[myRef,handleResize,rendering]);
返回{宽度,高度};
用法示例:
const MyComponent = ({ A, B }) => {
// A and B is data that is required in component
const componentRef = useRef()
const { width, height } = useResize(componentRef, !A || !B)
if (!A || !B) return;
return (
<div ref={componentRef}>
<p>{A} {width}px</p>
<p>{B} {height}px</p>
<div/>
)
}
constmycomponent=({A,B})=>{
//A和B是组件中需要的数据
常量componentRef=useRef()
const{width,height}=useResize(componentRef,!A | | B)
如果(!A | |!B)返回;
返回(
{A} {width}px
{B} {height}px
)
}
马科斯答案的修改版本
我放置了一个渲染bool,以确保在放置高度和宽度之前渲染所有数据。这是为了确保在计算高度时,所有必需的元素都已就位,而不是冒着接收不正确高度和宽度的风险
UserSize挂钩放置在单独的文件夹中:
从'react'导入{useState,useffect,useCallback};
export const useResize=(myRef:React.MutableRefObject,rendering:boolean)=>{
const[width,setWidth]=useState(0);
const[height,setHeight]=useState(0);
const handleResize=useCallback(()=>{
设置宽度(myRef.current.offsetWidth);
设置高度(myRef.current.offsetHeight);
},[myRef]);
useffect(()=>{
如果(!渲染){
myRef.current&&myRef.current.addEventListener('resize',
handleResize(),{once:true});
}
},[myRef,handleResize,rendering]);
返回{宽度,高度};
用法示例:
const MyComponent = ({ A, B }) => {
// A and B is data that is required in component
const componentRef = useRef()
const { width, height } = useResize(componentRef, !A || !B)
if (!A || !B) return;
return (
<div ref={componentRef}>
<p>{A} {width}px</p>
<p>{B} {height}px</p>
<div/>
)
}
constmycomponent=({A,B})=>{
//A和B是组件中需要的数据
常量componentRef=useRef()
const{width,height}=useResize(componentRef,!A | | B)
如果(!A | |!B)返回;
返回(
{A} {width}px
{B} {height}px
)
}
查看您是否尝试获取元素的.offsetHeight
?这里是。另外,您制作元素符号的目的是什么?查看您是否尝试获取元素的。offsetHeight
?这里是。另外,您制作元素符号的目的是什么?myRef未定义:@AlainIb将其更改为componentRef=))myRef未定义:@AlainIb将其更改为componentRef=))