javascript - 在这个简单的例子中,在 componentDidMount() 之后使用 findDOMNode() 找不到 `ref`

标签 javascript reactjs

有谁明白为什么在下面的示例中我无法使用 findDOMNodethis.refs.foo 获取引用 foo?据我所知 foo 应该在 componentDidMount 之后可用?我该怎么做才能做到这一点? (我正在使用 React 15.2.1)

class PageComp extends React.Component {
  render() {
    return (
      <div>
        <WrapperComp>
          <div ref="foo">item</div>
          <div>item</div>
        </WrapperComp>
      </div>
    );
  };
}

class WrapperComp extends React.Component {

  componentDidMount() {
    const tryNode1 = ReactDOM.findDOMNode(this.refs.foo);
    const tryNode2 = this.refs.foo;
    console.log(tryNode1);
    console.log(tryNode2);
  }

  render() {
    return (
      <div>
        { this.props.children }
      </div>
    );
  }
}


ReactDOM.render(
  <PageComp />,
  document.getElementById('app')
);

JSBIN

最佳答案

@Alexander T 的评论是正确的。

此外,访问 DOM 元素的推荐方法是使用回调引用。 (阅读此处红色的“注释”:https://facebook.github.io/react/docs/more-about-refs.html#the-ref-string-attribute)

例如使用您的 PageComp 组件:

class PageComp extends React.Component {

  componentDidMount() {
     // use this.foo here at will
  }

  render() {
    return (
      <div>
        <WrapperComp>
          <div ref={(el) => this.foo = el}>item</div>
          <div>item</div>
        </WrapperComp>
      </div>
    );
  };
}

这会将 this.foo 设置为该元素,而不使用 findDOMNode

关于javascript - 在这个简单的例子中,在 componentDidMount() 之后使用 findDOMNode() 找不到 `ref`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502614/

相关文章:

reactjs - 悬停时的 React-Bootstrap 下拉菜单

javascript - 如何使用 ReactJS 添加 &lt;script&gt; 标签?

javascript - Mongoose 按子标准查找文档

javascript - 获取访问者的 Optimizely A/B 测试和变体

javascript - 设置 3d 立方体旋转原点

html - 如何使下拉100%宽度包含react js中的另一个下拉?

html - <pre> 标签和 Paper 之间的空间

javascript - react 俄罗斯方 block 。函数总是返回 false

javascript - 无法在 bootstrap-notify 插件上使用 HTML 内容

Javascript 将功能添加到影子根中的自定义元素