付費(fèi)下載
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】React組件refs該如何使用
在下給大家分享一下React組件refs該如何使用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!ref顧名思義我們知道,其實(shí)它就可以被看座是一個(gè)組件的參考,也可以說(shuō)是一個(gè)標(biāo)識(shí)。作為組件的屬性,其屬性值可以是一個(gè)字符串也可以是一個(gè)函數(shù)。其實(shí),ref的使用不是必須的。即使是在其適用的場(chǎng)景中也不是非用不可的,因?yàn)槭褂胷ef實(shí)現(xiàn)的功能同樣可以轉(zhuǎn)化成其他的方法來(lái)實(shí)現(xiàn)。但是,既然ref有其適用的場(chǎng)景,那也就是說(shuō)ref自有其優(yōu)勢(shì)。關(guān)于這一點(diǎn)和ref的適用場(chǎng)景,官方文檔中是這樣說(shuō)的:在從render方法中返回UI結(jié)構(gòu)之后,你可能想沖出React虛擬DOM的限制,在render返回的組件實(shí)例上調(diào)用某些方法。通常來(lái)說(shuō),這樣做對(duì)于應(yīng)用中的數(shù)據(jù)流動(dòng)是不必要的,因?yàn)榛钴S的數(shù)據(jù)(Reactivedata)流總是確保最新的props被傳遞到每一個(gè)從render()輸出的子級(jí)中去。然而,仍然有幾個(gè)場(chǎng)景使用這種方式是必須的,或者說(shuō)是有益的:查找渲染出的組件的DOM標(biāo)記(可以認(rèn)為是DOM的標(biāo)識(shí)ID),在一個(gè)大型的非React應(yīng)用中使用React組件或者是將你現(xiàn)有的代碼轉(zhuǎn)化成React。下面我們來(lái)看這樣的一個(gè)場(chǎng)景(下面的例子經(jīng)常被用于ref的講解,可見下面描述的場(chǎng)景應(yīng)該是比較經(jīng)典的):通過(guò)某個(gè)事件使<input/>元素的值被設(shè)為空字符串,然后使該<input/>元素獲得焦點(diǎn)。var
App
=
React.createClass({
getInitialState:
function()
{
return
{userInput:
''};
},
handleChange:
function(e)
{
this.setState({userInput:
e.target.value});
},
clearAndFocusInput:
function()
{
this.setState({userInput:
''});
//
設(shè)置值為空字符串
//這里想要實(shí)現(xiàn)獲得焦點(diǎn)
},
render:
function()
{
return
(
<p>
<input
value={this.state.userInput}
onChange={this.handleChange}
/>
<input
type="button"
value="Reset
And
Focus"
onClick={this.clearAndFocusInput}
/>
</p>
);
}
});在上面例子中,我們已經(jīng)實(shí)現(xiàn)了點(diǎn)擊按鈕通知input元素將值設(shè)為空字符串,但是還沒有實(shí)現(xiàn)使input元素獲得焦點(diǎn)。這實(shí)現(xiàn)起來(lái)有些困難,因?yàn)樵趓ender()中返回的并不是實(shí)際的子組件的組合,僅僅是一個(gè)特定時(shí)間特定實(shí)例的描述。這句話感覺挺繞的,其實(shí)render返回的是虛擬的DOM,并不是真實(shí)的DOM。因此我們不需要僅僅著眼于那些從render()中返回的那些組件。那說(shuō)到這,對(duì)于我們?nèi)绾螌?shí)現(xiàn)獲得焦點(diǎn)并沒有太大的幫助。要想實(shí)現(xiàn)獲得焦點(diǎn)這個(gè)功能我們需要借助ref來(lái)實(shí)現(xiàn)。上面我們提到過(guò)ref的值有兩種類型,一種是字符串、一種是回調(diào)函數(shù)。ref字符串上屬性React支持一個(gè)特殊的屬性,你可以將這個(gè)屬性加在任何通過(guò)render()返回的組件中。這也就是說(shuō)對(duì)render()返回的組件進(jìn)行一個(gè)標(biāo)記,可以方便的定位的這個(gè)組件實(shí)例。這就是ref的作用。ref的形式如下<input
ref="myInput"
/>要想訪問(wèn)這個(gè)實(shí)例,可以通過(guò)this.refs來(lái)訪問(wèn):this.refs.myInput先前版本中,我們可以通過(guò)React.findDOMNode(this.refs.myInput)來(lái)訪問(wèn)組件的DOM。但是現(xiàn)在,已經(jīng)放棄了findDOMNode函數(shù)了,可以直接使用this.refs.myInput來(lái)進(jìn)行訪問(wèn)。ref回調(diào)函數(shù)ref屬性也可以是一個(gè)回調(diào)函數(shù)而不是一個(gè)名字。
這個(gè)函數(shù)將要在組件被掛載之后立即執(zhí)行。這個(gè)參照的組件將會(huì)作為該函數(shù)的參數(shù),這個(gè)函數(shù)可以立即使用這個(gè)組件參數(shù),當(dāng)然也可以將其保存供以后使用。其形式也比較簡(jiǎn)單:render:
function()
{
return
<TextInput
ref={(c)
=>
this._input
=
c}
}
/>;
},
componentDidMount:
function()
{
this._input.focus();
},或者是render:
function()
{
return
(
<TextInput
ref={function(input)
{
if
(input
!=
null)
{
input.focus();
}
}}
/>
);
},這里需要注意,當(dāng)這個(gè)參照組件被卸載并且這個(gè)ref改變的時(shí)候,先前的ref的參數(shù)值將為null。這將有效的防止了內(nèi)存的泄露。所以在上面代碼中會(huì)有if判斷:if(input
!=
null){
input.focus();
}上面介紹了ref的使用場(chǎng)景和方法,下面我們就將上面的例子來(lái)補(bǔ)充完整,從而實(shí)現(xiàn)獲得焦點(diǎ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
<input
/>
now!
if
(this.refs.myTextInput
!==
null)
{
this.refs.myTextInput.focus();
}
},
render:
function()
{
return
(
<p>
<input
value={this.state.userInput}
onChange={this.handleChange}
ref=”myTextInput”
/>
<input
type="button"
value="Reset
And
Focus"
onClick={this.clearAndFocusInput}
/>
</p>
);
}
});
ReactDOM.render(
<App
/>,
document.getElemen
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)政法大學(xué)馬克思主義基本原理概論期末考試模擬題含答案解析(必刷)
- 2024年湖北科技學(xué)院馬克思主義基本原理概論期末考試題及答案解析(必刷)
- 2025年橫峰縣招教考試備考題庫(kù)及答案解析(奪冠)
- 2025年內(nèi)蒙古商貿(mào)職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2024年西峽縣幼兒園教師招教考試備考題庫(kù)帶答案解析
- 2025年撫遠(yuǎn)縣幼兒園教師招教考試備考題庫(kù)附答案解析
- 2025年南鄭縣幼兒園教師招教考試備考題庫(kù)帶答案解析(奪冠)
- 東北三省三校2025年高三下學(xué)期生物第一次聯(lián)合模擬考試試題(含答案)
- 2025年海晏縣幼兒園教師招教考試備考題庫(kù)帶答案解析
- 2025年泗陽(yáng)縣幼兒園教師招教考試備考題庫(kù)及答案解析(奪冠)
- 《鐵路技術(shù)管理規(guī)程》(普速鐵路部分)
- 2024-2025年度“地球小博士”全國(guó)地理科普知識(shí)大賽參考試題庫(kù)(含答案)
- 北師大版六年級(jí)上冊(cè)分?jǐn)?shù)混合運(yùn)算100題帶答案
- (備份)JTS-133-3-2010關(guān)于發(fā)布《航道工程地質(zhì)勘察規(guī)范》(JTS 133-3-2010)的公告-PDF解密
- DB32T 4401-2022《綜合醫(yī)院建筑設(shè)計(jì)標(biāo)準(zhǔn)》
- 2020年高考中考考試工作經(jīng)費(fèi)項(xiàng)目績(jī)效評(píng)價(jià)報(bào)告
- 2017-2022年近六年浙江省寧波市中考數(shù)學(xué)真題
- 加拿大鞋類市場(chǎng)銷售通
- 表B. 0 .11工程款支付報(bào)審表
- 低蛋白血癥的護(hù)理查房知識(shí)ppt
- 2023自愿離婚協(xié)議書范文(3篇)
評(píng)論
0/150
提交評(píng)論