我正在开发一个需要事件侦听器的应用程序。提供给此事件的侦听器的功能正在与DOM交互。组件安装时也需要运行相同的功能:
...
componentDidMount() {
this.getWidth();
window.addEventListener('resize', this.getWidth);
}
getWidth = () => {
const elem = this.elem.clientWidth;
...
}
render() {
return(
<div>
<SomeComponent
ref={(elem) => this.elem = elem}
/>
</div>
);
}
...
由于此应用程序最初呈现服务器端,因此componentDidMount
生命周期方法不运行,因此,getWidth
函数不运行,并且事件侦听器未添加到窗口对象中。我该如何使这项工作?
来自文档(https://facebook.github.io/react/docs/react-dom-server.html):
如果您在已经具有此的节点上调用reactdom.render() 服务器渲染的标记,React将保留它,并且仅附加事件 处理程序,允许您进行表现非常出色 经验。