【发布时间】:2020-05-30 13:07:54
【问题描述】:
我有一个类需要获取 DOM 元素的大小。它运行良好,但是当我调整窗口大小时,它不会更新,直到我更改应用程序中的状态,强制重新渲染。我尝试将this.forceUpdate 添加到componentDidMount() 中的'resize' 事件侦听器,但没有成功。也许我做错了什么?理想情况下,无论如何我都想避免使用this.forceUpdate 来影响性能。有什么解决方法吗?提前致谢!
我的代码:
class MyComponent extends React.Component {
state = { x: 0, y: 0 }
refCallback = (element) => {
if (!element) {
return
}
const { x, y } = element.getBoundingClientRect()
this.setState({ x, y })
}
render() {
console.log('STATE:', this.state) // Outputs the correct x and y values.
return (
<div ref={this.refCallback}>
<button>Hello world</button>
</div>
)
}
}
【问题讨论】:
-
您是否在
window对象上添加了resize事件侦听器?这是触发浏览器调整大小事件的元素。您可以在这个问题中看到example 说明如何使用钩子完成此操作,但基本上相同的方法可以用于类组件,您可以在其中编写一个更新状态并将其附加到窗口的函数。 -
@ChrisB。我已经尝试过了
标签: reactjs