繁体   English   中英

为什么`this.refs`在这个简单的例子中返回undefined?

[英]Why does `this.refs` return undefined in this simple example?

在下面的示例中this.refs.foo.clientWidth返回undefined ,我无法弄清楚原因。 如何在PageComp获取SomeComp的引用来使用它的宽度? (使用React 15.2.1或类似)

class PageComp extends React.Component {

  componentDidMount() {
    console.log(this.refs.foo.clientWidth);
  }

  render() {
    return (      
      <div>
      <p>{this.props.name}</p>
      <SomeComp ref="foo" />
      </div>
    );
  }
}

class SomeComp extends React.Component {
  render() {
    return (
      <div>
      <h1>I loaded</h1>
      </div>
    );
  }
}


ReactDOM.render(
  <PageComp name="Joe Schmoe"/>,
  document.getElementById('react_example')
);

JSBIN

this.refs.foo返回React Element。 但是如果你想使用DOM元素 - 你需要找到这个节点

React 15.0.1需要以下语法ReactDOM.findDOMNode(this.refs.foo)

JSBIN: http ://jsbin.com/xabidaquti/1/edit?html,js,console,output

为了更清晰,如果将refs设置为divinput等html元素, this.refs.foo.clientWidth将起作用。 因为refs本身会在这样的html元素的情况下返回DOM节点。

如果refs设定一些反应的组分,那么我们只能访问使用组件的DOM节点ReactDom.findDOMNode(this.refs.foo)因此我们需要得到clientWidth使用ReactDom.findDOMNode(this.refs.foo).clientWidth

参考

试试这个ReactDOM.findDOMNode(this.refs["foo"].clientWidth)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM