javascriptreactjs

How to access parent ref from child


I have some problem to pass the ref to child element in JSX. Please, see the following:

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 />);

I want to access #parent width from #child. How it is possible?


Solution

  • In your particular example you're just getting width of an element and passing it to another element. If you're using latest react version you should checkout new ref's api (https://reactjs.org/docs/refs-and-the-dom.html) And your example will look something like that

    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"));