React中獲取DOM節(jié)點(diǎn)的兩種方法

React提供的獲取DOM元素的方法有兩種,一是react-dom中的findDOMNode(),二是refs。

1、findDOMNode

findDOMNode通常用于React組件的引用,其語法如下:

import ReactDOM from 'react-dom';
ReactDOM.findDOMNode(ReactComponent);

當(dāng)組件被渲染到DOM中后,findDOMNode會返回該組件實(shí)例對應(yīng)的DOM節(jié)點(diǎn)。

示例:

componentDidMount(){
    const dom = ReactDOM.findDOMNode(this);
    // this為當(dāng)前組件的實(shí)例
}

render() {}

注:如果render()中返回null,那么findDOMNode()也返回null。findDOMNode只對已經(jīng)掛載的組件有效。

2、refs

refs多用于React組件內(nèi)子組件的引用。使用ref獲取DOM節(jié)點(diǎn)有兩種情況:

(1)子組件為原生DOM組件:獲取到的就是這個DOM節(jié)點(diǎn)。如下例,this.input就獲取到了當(dāng)前<input />節(jié)點(diǎn)。

<input ref={(ref)=>{this.myInput = ref}} />

通過this.myInput,我就可以對<input />進(jìn)行一系列操作,比如讓輸入框聚焦:

this.myInput.focus();

注:refs也支持字符串格式:

<input ref='myInput' />

通過this.refs.myInput獲取到節(jié)點(diǎn)。

(2)子組件為React組件,比如<MyInput/>:獲得的就是<MyInput/>的實(shí)例,因此就可以調(diào)用<MyInput/>的實(shí)例方法。
示例:

componentDidMount(){
    const myComp = this.refs.myComp;  // 獲取到的是<Comp />的實(shí)例myComp
    const dom = ReactDOM.findDOMNode(myComp);  // 獲取到實(shí)例對應(yīng)的DOM節(jié)點(diǎn)
}

render(){
    return (
        <div>
            <Comp ref='myComp' />
        </div>
    );
}

注:調(diào)用<Comp />實(shí)例方法的方式:this.refs.myComp.method(),但并不建議這種調(diào)用方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容