[英]Can't get offsetHeight from React Ref
我試圖在React render
方法中獲取div
元素的大小。 但它總是offsetHeight,offsetWidth
為0
。
我可以在console.log
時看到offsetHeight,offsetWidth
實際值。
如何在組件呈現后獲取容器 div ref 元素的實際大小?
這是我的實現。
class MyComponent extends Component {
constructor(props) {
super(props);
this.state = {
height:0,
width:0,
}
this.containerRef = React.createRef()
}
componentDidMount(){
console.log(this.containerRef)
//saw offsetWidth and offsetHeightSize (300,700)
const {offsetHeight,offsetWidth} = this.containerRef.current
this.setState({
width:offsetWidth,//getting 0
height:offsetHeight //getting 0
})
}
render() {
const {width,height} = this.state
return (
<div ref={this.containerRef}>
{`width:${width}-height:${height}`}
</div>
);
}
}
請幫忙。
謝謝。
反應鈎子解決方案
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/>
)
}
基於類的解決方案
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>
)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.