React提供的获取DOM元素的方法有两种,一是react-dom中的findDOMNode(),二是refs。
1、findDOMNode
findDOMNode通常用于React组件的引用,其语法如下:
import ReactDOM from 'react-dom'; ReactDOM.findDOMNode(ReactComponent);
当组件被渲染到DOM中后,findDOMNode会返回该组件实例对应的DOM节点。
示例:
componentDidMount(){ const dom = ReactDOM.findDOMNode(this); // this为当前组件的实例 } render() {}
注:如果render()中返回null,那么findDOMNode()也返回null。findDOMNode只对已经挂载的组件有效。
2、refs
React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。
这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。
在正常的 react 数据流中,props 是父组件与子元素交互的唯一渠道。如果想要修改子元素,你需要通过一个新的 props 进行重新渲染。但是,在一些情境下,你需要在正常数据流外强行修改子元素,这时,你就需要用到 refs。修改的子元素可以是react组件的实例,也可以是DOM元素。
refs多用于React组件内子组件的引用。使用ref获取DOM节点有两种情况:
(1)子组件为原生DOM组件:获取到的就是这个DOM节点。如下例,this.input就获取到了当前<input />
节点。
<input ref={(ref)=>{this.myInput = ref}} />
通过this.myInput,我就可以对<input />
进行一系列操作,比如让输入框聚焦:
this.myInput.focus();
注:refs也支持字符串格式:
<input ref='myInput' />
通过this.refs.myInput获取到节点。
(2)子组件为React组件,比如<MyInput/>
:获得的就是<MyInput/>
的实例,因此就可以调用<MyInput/>
的实例方法。
示例:
componentDidMount(){ const myComp = this.refs.myComp; // 获取到的是<Comp />的实例myComp const dom = ReactDOM.findDOMNode(myComp); // 获取到实例对应的DOM节点 } render(){ return ( <p> <Comp ref='myComp' /> </p> ); }
注:调用<Comp />
实例方法的方式:this.refs.myComp.method(),但并不建议这种调用方式。
以上就是react怎么获取dom元素?的详细内容,更多请关注万博manbetx平台中文网其它相关文章!