国产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顧名思義我們知道,其實(shí)它就可以被看座是一個(gè)組件的參考,也可以說是一個(gè)標(biāo)誌。作為組件的屬性,其屬性值可以是字串也可以是函數(shù)。

其實(shí),ref的使用不是必須的。即使在其適用的場(chǎng)景中也不是非用不可的,因?yàn)槭褂胷ef實(shí)現(xiàn)的功能同樣可以轉(zhuǎn)化成其他的方法來實(shí)現(xiàn)。但是,既然ref有其適用的場(chǎng)景,也就是說ref自有其優(yōu)勢(shì)。關(guān)於這一點(diǎn)和ref的適用場(chǎng)景,官方文件中是這樣說的:

在從render 方法中返回UI 結(jié)構(gòu)之後,你可能想衝出React 虛擬DOM 的限制,在render 返回的元件實(shí)例上呼叫某些方法。通常來說,這樣做對(duì)於應(yīng)用程式中的資料流是不必要的,因?yàn)榛钴S的資料( Reactive data )流總是確保最新的 props 被傳遞到每一個(gè)從 render() 輸出的子級(jí)中去。然而,仍然有幾個(gè)場(chǎng)景使用這種方式是必須的,或者說是有益的:尋找渲染出的元件的DOM標(biāo)記(可以認(rèn)為是DOM的識(shí)別ID),在一個(gè)大型的非React應(yīng)用中使用React元件或者是將你現(xiàn)有的程式碼轉(zhuǎn)換成React。

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

var App = React.createClass({
??? getInitialState: function() {
????? return {userInput: ''};
??##????? this.setState({userInput: e.target.value});
??? },
??? clearAndFocusInput: function() {
??為空字串
??????????????? //這裡想要達(dá)到為焦點(diǎn)?????
??? },
???#????????? value={this.state.userInput}
??????????? onChange={this.handleChange}
????????put type="button"
??????????????????? ? value="Reset And Focus"
?????={this.clearAndFocusInput}
??? ??????????/>
???????

點(diǎn)擊按鈕通知input元素將值設(shè)為空字串,但是還沒有實(shí)現(xiàn)使input元素獲得焦點(diǎn)。這實(shí)現(xiàn)起來有些困難,因?yàn)樵趓ender()中傳回的並不是實(shí)際的子元件的組合,只是一個(gè)特定時(shí)間特定實(shí)例的描述。這句話感覺挺繞的,其實(shí)render回傳的是

虛擬的DOM

,並不是真實(shí)的DOM。因此我們不需要僅僅著眼於那些從render()中返回的那些元件。

那說到這,對(duì)於我們?nèi)绾螌?shí)現(xiàn)獲得焦點(diǎn)並沒有太大的幫助。要實(shí)現(xiàn)獲得焦點(diǎn)這個(gè)功能我們需要藉助ref來實(shí)現(xiàn)。上面我們提到過ref的值有兩種類型,一種是字串、一種是回呼函數(shù)。


ref字串上屬性

React支援一個(gè)特殊的屬性,你可以將這個(gè)屬性加在任何經(jīng)由render()傳回的元件中。這也就是說對(duì)render()回傳的元件進(jìn)行一個(gè)標(biāo)記,可以方便的定位的這個(gè)元件實(shí)例。這就是ref的作用。

ref的形式如下

要想存取這個(gè)實(shí)例,可以透過this.refs來存?。?/p>

this.refs.myInput

先前版本中,我們可以透過React.findDOMNode(this.refs.myInput)來存取元件的DOM。但現(xiàn)在,已經(jīng)放棄了findDOMNode函數(shù)了,可以直接用this.refs.myInput來存取。 (想看更多就到PHP中文網(wǎng)React參考手冊(cè)欄位學(xué)習(xí))

#ref回呼函數(shù)

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

其形式也比較簡(jiǎn)單:

render: function() {

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

或是

render: function() {

??? return (
????? ??????? ref={function(input) {
????();
????????? }
}} />
??? );
},

這裡要注意,當(dāng)這個(gè)參考元件被卸載且這個(gè)ref改變的時(shí)候,先前的ref的參數(shù)值將為null。這將有效的防止了內(nèi)存的洩漏。所以在上面程式碼中會(huì)有if判斷:

if(input != null){

???????? input.focus();

}

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

焦點(diǎn)的功能

var App = React.createClass({
??? getInitialState: function() {
??????? return {userInput: ''};
???.setState({userInput: e.target.value});
??? },
???clearAndFocusInput: function() {
??????? this.setState({userInput: ''}# // 清除輸入輸入); // 我們希望現(xiàn)在聚焦!
??????? if (this.refs.myText ##??? render: function() {
??????? return (
???????????


????????????? value={this.state.userInput}
????????????????????? ref =」myTextInput”??????
?????????????????????????????? ???????????????????? type="button"
?? ???????????????? onClick={this.clearAndFocusInput }
?????????????#???????????


??????? );
??? }
});
ReactDOM.render(
?? }
});
ReactDOM.render(
?? }
}) #);

在這個(gè)範(fàn)例中,render函數(shù)回傳一個(gè);實(shí)例的描述。但是真正的實(shí)例透過this.refs。 myTextInput取得。只要渲染回傳的某個(gè)子元件有 ref="myTextInput" ,this.refs. myTextInput就會(huì)取得正確的實(shí)例。

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

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

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版

神級(jí)程式碼編輯軟體(SublimeText3)

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

ReactRouter使用指南:如何實(shí)現(xiàn)前端路由控制隨著單頁應(yīng)用的流行,前端路由成為了一個(gè)不可忽視的重要部分。 ReactRouter作為React生態(tài)系統(tǒng)中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實(shí)作變得非常簡(jiǎn)單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範(fàn)例。安裝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)勢(shì)。在選擇使用哪種前端框架時(shí),開發(fā)人員需要根據(jù)專案需求、團(tuán)隊(duì)技能和個(gè)人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

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

Java框架與React框架的整合:步驟:設(shè)定後端Java框架。建立專案結(jié)構(gòu)。配置建置工具。建立React應(yīng)用程式。編寫RESTAPI端點(diǎn)。配置通訊機(jī)制。實(shí)戰(zhàn)案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

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

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

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

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

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

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

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

React生態(tài)系統(tǒng)包括狀態(tài)管理庫(如Redux)、路由庫(如ReactRouter)、UI組件庫(如Material-UI)、測(cè)試工具(如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ù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評(píng)論。 3)React的虛擬DOM和組件生命週期優(yōu)化了渲染效率和用戶交互管理。

See all articles