使用v0.13.0中引入的React.findDOMNode
方法,我能够通过this.props.children
上的映射获得传递给父组件的每个子组件的DOM节点。
但是,如果其中一些子元素恰好是React元素而不是组件(例如,其中一个子元素是通过JSX创建的<div>
),那么React将抛出一个不变的违规错误。
是否有一种方法可以在挂载后获得每个子节点的正确DOM节点,而不管子节点是哪个类?
发布于 2015-04-11 17:51:28
this.props.children
应该是ReactElement或ReactElement数组,而不是组件。
要获得子元素的DOM节点,需要克隆它们并为它们分配一个新的引用。
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节点。
发布于 2015-12-05 10:39:08
如果您想访问任何DOM元素,只需添加ref
属性,就可以直接访问该元素。
<input type="text" ref="myinput">
然后你可以直接:
componentDidMount: function()
{
this.refs.myinput.select();
},
如果您在任何元素中添加了一个ReactDOM.findDOMNode()
,则它们不需要使用ref
。
发布于 2015-04-10 19:05:47
这可以通过使用ref属性来实现。
在想要达到<div>
的例子中,您想要做的是使用<div ref="myExample">
。然后,您将能够通过使用React.findDOMNode(this.refs.myExample)
获得DOM节点。
从那里获得每个子节点的正确DOM节点可能就像在this.refs.myExample.children
上映射一样简单(我还没有测试过),但是您至少可以使用ref属性获取任何特定的挂载子节点。
这是官方的参考文献获取更多信息。
https://stackoverflow.com/questions/29568721
复制相似问题