我在 Chrome 上使用 React 15,想连接一个事件监听器来检测对父容器的更改。在四处寻找选项后,我遇到了 ResizeObserver 并且不确定如何让它在我的项目中工作。
目前,我将它放在我的构造函数中,但它似乎没有打印任何文本,而且我不确定要在 observe
调用中放入什么。
class MyComponent extends React.Component {
constructor(props) {
super(props);
const resizeObserver = new ResizeObserver((entries) => {
console.log("Hello World");
});
resizeObserver.observe(somethingGoesHere);
}
render() {
return (
<AnotherComponent>
<YetAnotherComponent>
</YetAnotherComponent>
<CanYouBelieveIt>
</CanYouBelieveIt>
<RealComponent />
</AnotherComponent>
);
}
}
理想情况下,我也不想将 RealComponent
包装在 div
中并给 div
一个 id。有没有办法直接到 RealComponent
?
我的目标是观察对 RealComponent
的任何调整大小更改,但是 MyComponent
也很好。我应该在 somethingGoesHere
槽中放什么?
编辑:
为了得到一些东西的工作,我咬紧牙关并包裹了一个 div
标记 RealComponent
。然后我给了它一个 id <div id="myDivTag">
并更改了 observe
调用:
resizeObserver.observe(document.getElementById("myDivTag"));
但是,当运行它时,我得到:
未捕获的类型错误:resizeObserver.observe 不是函数
任何帮助将不胜感激。
原文由 noblerare 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑:下面 Davidicus 的回答更完整,先看那里
ResizeObserver 不能进入构造函数,因为 div 在组件生命周期的那个点不存在。
我不认为你可以绕过额外的 div,因为反应组件无论如何都会减少到 html 元素。
把它放在 componentDidMount 中,它应该可以工作: