React中的Refs屬性你來了解嗎
1 介紹
react組件的三大屬性:
1.props屬性:封裝傳遞給組件的參數(shù)
2.state屬性:組件的狀態(tài),當(dāng)值發(fā)生改變后,重新渲染組件
3.refs屬性:
(1)通過該屬性可以去訪問DOM元素或render函數(shù)中的react元素(虛擬的DOM元素) ——DOM元素或render函數(shù)中的react元素的代理(句柄)
(2)本質(zhì)是ReactDOM.render()函數(shù)返回的實(shí)例(組件實(shí)例或DOM節(jié)點(diǎn))
Refs在計(jì)算機(jī)中稱為彈性文件系統(tǒng)。React中的Refs提供了一種方式,允許我們?cè)L問DOM節(jié)點(diǎn)或在render方法中創(chuàng)建的React元素。本質(zhì)為ReactDOM.render()返回的組件實(shí)例,如果是渲染組件則返回的是組件實(shí)例,如果渲染dom則返回的是具體的dom節(jié)點(diǎn)。
作用:Refs時(shí)React提供給我們安全訪問DOM元素或者某個(gè)組件實(shí)例的句柄。在類組件中,React將ref屬性中第一個(gè)參數(shù)作為DOM中的句柄。在函數(shù)組件中,React用hooks的api useRef也能獲得ref。
2 使用方法
2.1 createRef(版本>=React16.3)
一般在構(gòu)造函數(shù)中將refs分配給實(shí)例屬性,以供組件的其他方法中使用。
1、對(duì)于html元素:可以獲取元素實(shí)例
示例代碼:
class Refs extends React.Component {
constructor(props) {
super(props);
// 在構(gòu)造函數(shù)中初始化一個(gè)ref,然后在return中就可以使用了
this.myRef = React.createRef();
console.log(this.myRef);
}
componentDidMount() { // 在render()函數(shù)執(zhí)行完成后調(diào)用
this.myRef.current.innerHTML = "橘貓吃不胖"; // this.myRef中有一個(gè)current屬性
}
render() {
return (
<div>
{/*如果ref屬性被用于html,那么它的值就是底層DOM元素*/}
<div ref={this.myRef}></div>
</div>
);
}
}

2、可以和類組件進(jìn)行綁定 —— 代表類組件的實(shí)例
示例代碼:
class Refs extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount() {
// 在父組件中調(diào)用了子組件的方法
this.myRef.current.change();
}
render() {
return <Children ref={this.myRef}/>
}
}
class Children extends React.Component {
change() {
console.log("橘貓吃不胖變身");
}
render() {
return <span>橘貓吃不胖</span>
}
}
2.2 回調(diào)Refs
React將在組件掛載時(shí),會(huì)調(diào)用ref回調(diào)函數(shù)并傳入DOM怨怒是,當(dāng)卸載時(shí)調(diào)用它并傳入null。早componentDidMount或componentDidUpdate觸發(fā)前,React會(huì)保證refs一定是最新的。
示例代碼:
class Refs extends React.Component {
constructor(props) {
super(props);
this.targetRef = null;
this.myRef = (e) => this.targetRef = e;
}
componentDidMount() {
console.log("this.refs" + this.refs.container);
}
render() {
return <div ref={this.myRef}>
橘貓吃不胖
</div>
}
}
2.3 String類型的Refs(已過時(shí),不推薦使用)
示例代碼:
class Refs extends React.Component {
constructor(props) {
super(props);
this.targetRef = null;
this.myRef = (e) => this.targetRef = e;
}
componentDidMount() {
console.log("this.refs" + this.refs.container);
}
render() {
return <div ref={this.myRef}>
橘貓吃不胖
</div>
}
}
2.4 useRef(React Hooks)
function HookRef(props) {
const inputElement = useRef();
return (
<div>
<input ref={inputElement}/>
<button onClick={() => {
inputElement.current.focus()
}}>獲得焦點(diǎn)
</button>
</div>
)
}
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
React獲取組件對(duì)應(yīng)的DOM元素多種實(shí)現(xiàn)方法
本文主要介紹了React中獲取組件對(duì)應(yīng)DOM元素的多種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
React+Ant Design開發(fā)環(huán)境搭建的實(shí)現(xiàn)步驟
這篇文章主要介紹了React+Ant Design開發(fā)環(huán)境搭建的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
react中hooks使用useState的更新不觸發(fā)dom更新問題及解決
這篇文章主要介紹了react中hooks使用useState的更新不觸發(fā)dom更新問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
React-intl 實(shí)現(xiàn)多語言的示例代碼
本篇文章主要介紹了React-intl 實(shí)現(xiàn)多語言的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
React-Native之截圖組件react-native-view-shot的介紹與使用小結(jié)
這篇文章主要介紹了React-Native之截圖組件react-native-view-shot的介紹與使用小結(jié),需本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,要的朋友可以參考下2021-08-08
React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放時(shí)間滾動(dòng))
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放使勁按滾動(dòng)),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2024-02-02
基于react框架使用的一些細(xì)節(jié)要點(diǎn)的思考
下面小編就為大家?guī)硪黄趓eact框架使用的一些細(xì)節(jié)要點(diǎn)的思考。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
React 全自動(dòng)數(shù)據(jù)表格組件——BodeGrid的實(shí)現(xiàn)思路
表格是在后臺(tái)管理系統(tǒng)中用的最頻繁的組件之一,相關(guān)的功能有數(shù)據(jù)的新增和編輯、查詢、排序、分頁、自定義顯示以及一些操作按鈕。這篇文章主要介紹了React 全自動(dòng)數(shù)據(jù)表格組件——BodeGrid ,需要的朋友可以參考下2019-06-06

