javascript - 如何从孩子访问父参考
问题描述
我在将 ref 传递给 JSX 中的子元素时遇到了一些问题。请看以下内容:
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
render() {
return (
<div id="parent" ref={element => (this.parentRef = element)}>
<canvas id="child" width={this.parentRef.offsetWidth} />
</div>
);
}
}
ReactDOM.render(document.getElementById("app"), <App />);
我想#parent
从#child
. 怎么可能?
解决方案
在您的特定示例中,您只是获取元素的宽度并将其传递给另一个元素。如果您使用的是最新的反应版本,您应该检查新的 ref 的 api ( https://reactjs.org/docs/refs-and-the-dom.html ) 你的例子看起来像这样
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
width: 0
};
this.parentRef = React.createRef();
}
componentDidMount() {
window.addEventListener("resize", this.onResize);
this.onResize();
}
componentWillUnmount() {
window.removeEventListener("resize", this.onResize);
}
onResize = () => {
this.setState({
width: this.getParentSize()
});
};
getParentSize() {
return (this.parentRef.current && this.parentRef.current.offsetWidth) || 0;
}
render() {
return (
<div id="parent" ref={this.parentRef}>
<canvas
id="child"
width={this.getParentSize()}
style={{ background: "red" }}
/>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
推荐阅读
- bash - 真正的 bash 行数
- ruby-on-rails - Docker nginx 和应用程序正在运行,但应用程序未在浏览器上显示
- c# - OGR shapefile 点示例 C#
- javascript - 使用函数动态填充下拉列表
- ruby-on-rails - Rails 表单嵌套属性不允许参数
- haskell - 无法从上下文错误中推断出包含的约束
- sql - SQL dbms_lob.substr 从 hugeclob 输出中提取特定的单词/文本
- sql - 在 Select 中重用聚合
- mysql - 有没有办法在处理 auto_increment 时不正确 NULL 或列出所有值
- java - Java 静态变量访问