国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 React組件refs有什么用?react組件refs的作用及其使用詳解

React組件refs有什么用?react組件refs的作用及其使用詳解

Sep 11, 2018 pm 03:34 PM
react refs

本篇文章主要的解釋了關(guān)于react組件refs的詳解,現(xiàn)在我們來看看正文的內(nèi)容

ref顧名思義我們知道,其實它就可以被看座是一個組件的參考,也可以說是一個標(biāo)識。作為組件的屬性,其屬性值可以是一個字符串也可以是一個函數(shù)。

其實,ref的使用不是必須的。即使是在其適用的場景中也不是非用不可的,因為使用ref實現(xiàn)的功能同樣可以轉(zhuǎn)化成其他的方法來實現(xiàn)。但是,既然ref有其適用的場景,那也就是說ref自有其優(yōu)勢。關(guān)于這一點和ref的適用場景,官方文檔中是這樣說的:

在從 render 方法中返回 UI 結(jié)構(gòu)之后,你可能想沖出 React 虛擬 DOM 的限制,在 render 返回的組件實例上調(diào)用某些方法。通常來說,這樣做對于應(yīng)用中的數(shù)據(jù)流動是不必要的,因為活躍的數(shù)據(jù)( Reactive data )流總是確保最新的 props 被傳遞到每一個從 render() 輸出的子級中去。然而,仍然有幾個場景使用這種方式是必須的,或者說是有益的:查找渲染出的組件的DOM標(biāo)記(可以認(rèn)為是DOM的標(biāo)識ID),在一個大型的非React應(yīng)用中使用React組件或者是將你現(xiàn)有的代碼轉(zhuǎn)化成React。

下面我們來看這樣的一個場景(下面的例子經(jīng)常被用于ref的講解,可見下面描述的場景應(yīng)該是比較經(jīng)典的):通過某個事件使元素的值被設(shè)為空字符串,然后使該元素獲得焦點。

var App = React.createClass({
??? getInitialState: function() {
????? return {userInput: ''};
??? },
??? handleChange: function(e) {
????? this.setState({userInput: e.target.value});
??? },
??? clearAndFocusInput: function() {
????? this.setState({userInput: ''}); // 設(shè)置值為空字符串
??????????????? //這里想要實現(xiàn)獲得焦點?????
??? },
??? render: function() {
????? return (
???????


????????? value={this.state.userInput}
onChange={this.handleChange}
/>
??????????????????? value="Reset And Focus"
onClick={this.clearAndFocusInput}
/>
???????


????? );
??? }
? });

在上面例子中,我們已經(jīng)實現(xiàn)了點擊按鈕通知input元素將值設(shè)為空字符串,但是還沒有實現(xiàn)使input元素獲得焦點。這實現(xiàn)起來有些困難,因為在render()中返回的并不是實際的子組件的組合,僅僅是一個特定時間特定實例的描述。這句話感覺挺繞的,其實render返回的是虛擬的DOM,并不是真實的DOM。因此我們不需要僅僅著眼于那些從render()中返回的那些組件。

那說到這,對于我們?nèi)绾螌崿F(xiàn)獲得焦點并沒有太大的幫助。要想實現(xiàn)獲得焦點這個功能我們需要借助ref來實現(xiàn)。上面我們提到過ref的值有兩種類型,一種是字符串、一種是回調(diào)函數(shù)。

ref字符串上屬性

React支持一個特殊的屬性,你可以將這個屬性加在任何通過render()返回的組件中。這也就是說對render()返回的組件進(jìn)行一個標(biāo)記,可以方便的定位的這個組件實例。這就是ref的作用。

ref的形式如下

要想訪問這個實例,可以通過this.refs來訪問:

this.refs.myInput

先前版本中,我們可以通過React.findDOMNode(this.refs.myInput)來訪問組件的DOM。但是現(xiàn)在,已經(jīng)放棄了findDOMNode函數(shù)了,可以直接使用this.refs.myInput來進(jìn)行訪問。(想看更多就到PHP中文網(wǎng)React參考手冊欄目中學(xué)習(xí))

ref回調(diào)函數(shù)

ref屬性也可以是一個回調(diào)函數(shù)而不是一個名字。?? 這個函數(shù)將要在組件被掛載之后立即執(zhí)行。這個參照的組件將會作為該函數(shù)的參數(shù),這個函數(shù)可以立即使用這個組件參數(shù),當(dāng)然也可以將其保存供以后使用。

其形式也比較簡單:

render: function() {
?? return this._input = c} } />;
},
componentDidMount: function() {
?? this._input.focus();
},

或者是

render: function() {
??? return (
????? ref={function(input) {
if (input != null) {
input.focus();
}
}} />
??? );
},

這里需要注意,當(dāng)這個參照組件被卸載并且這個ref改變的時候,先前的ref的參數(shù)值將為null。這將有效的防止了內(nèi)存的泄露。所以在上面代碼中會有if判斷:

if(input != null){
???????? input.focus();
}

上面介紹了ref的使用場景和方法,下面我們就將上面的例子來補(bǔ)充完整,從而實現(xiàn)獲得焦點的功能

var App = React.createClass({
??? getInitialState: function() {
??????? return {userInput: ''};
??? },
??? handleChange: function(e) {
??????? this.setState({userInput: e.target.value});
??? },
??? clearAndFocusInput: function() {
??????? this.setState({userInput: ''}); // Clear the input
??????? // We wish to focus the now!
??????? if (this.refs.myTextInput !== null) {
??????????? this.refs.myTextInput.focus();
??????? }
??? },
??? render: function() {
??????? return (
???????????


? ?????????????? value={this.state.userInput}
onChange={this.handleChange}
ref=”myTextInput”
/>
??????????????? type="button"
value="Reset And Focus"
onClick={this.clearAndFocusInput}
/>
???????????


??????? );
??? }
});
ReactDOM.render(
??? ,
??? document.getElementById('content')
);

在這個例子中, render 函數(shù)返回一個 實例的描述。但是真正的實例通過 this.refs. myTextInput獲取。只要 render 返回的某個子組件帶有 ref="myTextInput" ,this.refs. myTextInput就會獲取到正確的實例。

上面就是ref的所有內(nèi)容,更多關(guān)于ref的介紹可以參考Ref to Components。

本篇文章到這就結(jié)束了(想看更多就到PHP中文網(wǎng)React使用手冊欄目中學(xué)習(xí)),有問題的可以在下方留言提問。

以上是React組件refs有什么用?react組件refs的作用及其使用詳解的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

React Router使用指南:如何實現(xiàn)前端路由控制 React Router使用指南:如何實現(xiàn)前端路由控制 Sep 29, 2023 pm 05:45 PM

ReactRouter使用指南:如何實現(xiàn)前端路由控制隨著單頁應(yīng)用的流行,前端路由成為了一個不可忽視的重要部分。ReactRouter作為React生態(tài)系統(tǒng)中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實現(xiàn)變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,并提供一些具體的代碼示例。安裝ReactRouter首先,我們需

PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,前端框架在Web開發(fā)中起著至關(guān)重要的作用。PHP、Vue和React作為三種具有代表性的前端框架,每一種都具有其獨(dú)特的特點和優(yōu)勢。在選擇使用哪種前端框架時,開發(fā)人員需要根據(jù)項目需求、團(tuán)隊技能和個人偏好做出明智的決策。本文將通過比較PHP、Vue和React這三種前端框架的特點和使

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設(shè)置后端Java框架。創(chuàng)建項目結(jié)構(gòu)。配置構(gòu)建工具。創(chuàng)建React應(yīng)用。編寫RESTAPI端點。配置通信機(jī)制。實戰(zhàn)案例(SpringBoot+React):Java代碼:定義RESTfulAPI控制器。React代碼:獲取并顯示API返回的數(shù)據(jù)。

vue.js vs.反應(yīng):特定于項目的考慮因素 vue.js vs.反應(yīng):特定于項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用于大型復(fù)雜應(yīng)用。1)Vue.js易于上手,適用于團(tuán)隊經(jīng)驗不足或項目規(guī)模較小的情況。2)React的生態(tài)系統(tǒng)更豐富,適合有高性能需求和復(fù)雜功能需求的項目。

React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVueDirectly.1)TeamExperience:selectBasedAsedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects,vueforsimplerprojects,reactforforforecomplexones.3)cocatizationNeedsneeds:reactofficatizationneedneeds:reactofferizationneedneedneedneeds:reactoffersizatization needeffersefersmoreflexiblesimore.4)ecosyaka

React在HTML中的作用:增強(qiáng)用戶體驗 React在HTML中的作用:增強(qiáng)用戶體驗 Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結(jié)合,提升用戶體驗。1)JSX嵌入HTML,使開發(fā)更直觀。2)虛擬DOM機(jī)制優(yōu)化性能,減少DOM操作。3)組件化管理UI,提高可維護(hù)性。4)狀態(tài)管理和事件處理增強(qiáng)交互性。

React的生態(tài)系統(tǒng):庫,工具和最佳實踐 React的生態(tài)系統(tǒng):庫,工具和最佳實踐 Apr 18, 2025 am 12:23 AM

React生態(tài)系統(tǒng)包括狀態(tài)管理庫(如Redux)、路由庫(如ReactRouter)、UI組件庫(如Material-UI)、測試工具(如Jest)和構(gòu)建工具(如Webpack)。這些工具協(xié)同工作,幫助開發(fā)者高效開發(fā)和維護(hù)應(yīng)用,提高代碼質(zhì)量和開發(fā)效率。

Netflix的前端:React(或VUE)的示例和應(yīng)用 Netflix的前端:React(或VUE)的示例和應(yīng)用 Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。1)React的組件化開發(fā)模式和強(qiáng)大生態(tài)系統(tǒng)是Netflix選擇它的主要原因。2)通過組件化,Netflix將復(fù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。3)React的虛擬DOM和組件生命周期優(yōu)化了渲染效率和用戶交互管理。

See all articles