Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取react.element的高度_Javascript_Node.js_Reactjs - Fatal编程技术网

Javascript 如何获取react.element的高度

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

我通过映射到一个数组并放置每个元素的HTML标记,动态呈现
符号(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=))