首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从React子元素获取DOM节点

从React子元素获取DOM节点
EN

Stack Overflow用户
提问于 2015-04-10 18:51:44
回答 6查看 165.3K关注 0票数 72

使用v0.13.0中引入的React.findDOMNode方法,我能够通过this.props.children上的映射获得传递给父组件的每个子组件的DOM节点。

但是,如果其中一些子元素恰好是React元素而不是组件(例如,其中一个子元素是通过JSX创建的<div> ),那么React将抛出一个不变的违规错误。

是否有一种方法可以在挂载后获得每个子节点的正确DOM节点,而不管子节点是哪个类?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-04-11 17:51:28

this.props.children应该是ReactElement或ReactElement数组,而不是组件。

要获得子元素的DOM节点,需要克隆它们并为它们分配一个新的引用。

代码语言:javascript
运行
复制
render() {
  return (
    <div>
      {React.Children.map(this.props.children, (element, idx) => {
        return React.cloneElement(element, { ref: idx });
      })}
    </div>
  );
}

然后可以通过this.refs[childIdx]访问子组件,并通过ReactDOM.findDOMNode(this.refs[childIdx])检索它们的DOM节点。

票数 73
EN

Stack Overflow用户

发布于 2015-12-05 10:39:08

如果您想访问任何DOM元素,只需添加ref属性,就可以直接访问该元素。

代码语言:javascript
运行
复制
<input type="text" ref="myinput">

然后你可以直接:

代码语言:javascript
运行
复制
componentDidMount: function() 
{
    this.refs.myinput.select();

},

如果您在任何元素中添加了一个ReactDOM.findDOMNode(),则它们不需要使用ref

票数 19
EN

Stack Overflow用户

发布于 2015-04-10 19:05:47

这可以通过使用ref属性来实现。

在想要达到<div>的例子中,您想要做的是使用<div ref="myExample">。然后,您将能够通过使用React.findDOMNode(this.refs.myExample)获得DOM节点。

从那里获得每个子节点的正确DOM节点可能就像在this.refs.myExample.children上映射一样简单(我还没有测试过),但是您至少可以使用ref属性获取任何特定的挂载子节点。

这是官方的参考文献获取更多信息。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29568721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档