React提供的獲取DOM元素的方法有兩種趋箩,一是react-dom中的findDOMNode()赃额,二是refs加派。
1、findDOMNode
findDOMNode通常用于React組件的引用跳芳,其語法如下:
import ReactDOM from 'react-dom';
ReactDOM.findDOMNode(ReactComponent);
當(dāng)組件被渲染到DOM中后芍锦,findDOMNode會返回該組件實例對應(yīng)的DOM節(jié)點。
示例:
componentDidMount(){
const dom = ReactDOM.findDOMNode(this);
// this為當(dāng)前組件的實例
}
render() {}
注:如果render()中返回null筛严,那么findDOMNode()也返回null醉旦。findDOMNode只對已經(jīng)掛載的組件有效饶米。
2桨啃、refs
refs多用于React組件內(nèi)子組件的引用。使用ref獲取DOM節(jié)點有兩種情況:
(1)子組件為原生DOM組件:獲取到的就是這個DOM節(jié)點檬输。如下例照瘾,this.input就獲取到了當(dāng)前<input />
節(jié)點。
<input ref={(ref)=>{this.myInput = ref}} />
通過this.myInput丧慈,我就可以對<input />
進(jìn)行一系列操作析命,比如讓輸入框聚焦:
this.myInput.focus();
注:refs也支持字符串格式:
<input ref='myInput' />
通過this.refs.myInput獲取到節(jié)點。
(2)子組件為React組件逃默,比如<MyInput/>
:獲得的就是<MyInput/>
的實例鹃愤,因此就可以調(diào)用<MyInput/>
的實例方法。
示例:
componentDidMount(){
const myComp = this.refs.myComp; // 獲取到的是<Comp />的實例myComp
const dom = ReactDOM.findDOMNode(myComp); // 獲取到實例對應(yīng)的DOM節(jié)點
}
render(){
return (
<div>
<Comp ref='myComp' />
</div>
);
}
注:調(diào)用<Comp />
實例方法的方式:this.refs.myComp.method()完域,但并不建議這種調(diào)用方式软吐。