react props與refs

props

就是在調(diào)用組件的時(shí)候在組件中添加屬性傳到組件內(nèi)部去使用

? ? 每個(gè)組件都會(huì)有 props 屬性

? 組件標(biāo)簽的所有屬性都保存在 props

? 組件內(nèi)部不能改變外部傳進(jìn)來(lái)的 props 屬性值

接下來(lái)如果想對(duì)傳入的 props 屬性進(jìn)行一些必傳癞松、默認(rèn)值米同、類(lèi)型的校驗(yàn)拓售,就需要用到一個(gè) prop-types 庫(kù)

下載:npm i prop-types --save引入:import PropTypes from ‘prop-types’

例子

class Person extends React.Component{

//對(duì)標(biāo)簽屬性進(jìn)行類(lèi)型哪替、必要性的限制?

static propTypes = {? ?

name:PropTypes.string.isRequired,//限制name必傳结澄,且為字符串?

sex:PropTypes.string,//限制sex為字符串? ?

age:PropTypes.number,//限制age為數(shù)字?

speak:PropTypes.func,//限制speak為函數(shù)? }?

//指定默認(rèn)標(biāo)簽屬性值?

static defaultProps = {? ? sex:'男', //sex默認(rèn)值為男? ?

age:18 //age默認(rèn)值為18? }}


refs 屬性

字符串形式的 ref(這種方式已過(guò)時(shí),不推薦使用,因?yàn)樾实停?/p>

refs 是組件實(shí)例對(duì)象中的屬性夫晌,它專(zhuān)門(mén)用來(lái)收集那些打了 ref 標(biāo)簽的 dom 元素

比方說(shuō),組件中的 input 添加了一個(gè) ref=“input1”那么組件實(shí)例中的 refs 就 ={input1:input(真實(shí) dom)}

這樣就可以通過(guò) this.refs.input1 拿到 input 標(biāo)簽 dom 了就不需要想原生 js 那樣通過(guò)添加屬性 id昧诱,然后通過(guò) document.getElementById (“id”) 的方式拿回調(diào)函數(shù)class Demo extends React.Component{

? showData = () => {? ?

const {input1} = this? ?

alert(input1.value)?

}?

render(){? ?

return{? ?

<input ref={c => this.input1 = c}? type="text" />?

? ? <button onClick={this.showData}>

點(diǎn)我展示數(shù)據(jù)</button>?

}? }}

直接讓 ref 屬性 = 一個(gè)回調(diào)函數(shù)晓淀,為什么這里說(shuō)是回調(diào)函數(shù)呢?

因?yàn)檫@個(gè)函數(shù)是我們定義的盏档,但不是我們調(diào)用的

是 react 在執(zhí)行 render 的時(shí)候凶掰,看到 ref 屬性后跟的是函數(shù),他幫我們調(diào)用了

然后把當(dāng)前 dom 標(biāo)簽當(dāng)成形參傳入

所以就相當(dāng)于把當(dāng)前節(jié)點(diǎn) dom 賦值給了 this.input1蜈亩,那這個(gè) this 指的是誰(shuí)呢懦窘?

不難理解,這里是箭頭函數(shù)勺拣,本身沒(méi)有 this 指向奶赠,所以這個(gè) this 得看外層的該函數(shù)外層是 render 函數(shù)體內(nèi),所以 this 就是組件實(shí)例對(duì)象所以 ref={c=>this.input1=c}

意思就是給組件實(shí)例對(duì)象添加一個(gè) input1最后要取對(duì)應(yīng)節(jié)點(diǎn) dom 也直接從 this(組件實(shí)例中纫┯小)

createRef

createRef() 方法是 React 中的 API毅戈,它會(huì)返回一個(gè)容器,存放被 ref 標(biāo)記的節(jié)點(diǎn)愤惰,但該容器是專(zhuān)人專(zhuān)用的苇经,就是一個(gè)容器只能存放一個(gè)節(jié)點(diǎn);

當(dāng) react 執(zhí)行到 div 中第一行時(shí)宦言,發(fā)現(xiàn) input 節(jié)點(diǎn)寫(xiě)了一個(gè) ref 屬性扇单,又發(fā)線(xiàn)在上面創(chuàng)建了 myRef 容器,所以它就會(huì)把當(dāng)前的節(jié)點(diǎn)存到組件實(shí)例的 myRef 容器中

注意:如果你只創(chuàng)建了一個(gè) ref 容器奠旺,但多個(gè)節(jié)點(diǎn)使用了同一個(gè) ref 容器蜘澜,則最后的會(huì)覆蓋掉前面的節(jié)點(diǎn)施流,所以,你通過(guò) this.ref 容器.current 拿到的那個(gè)節(jié)點(diǎn)是最后一個(gè)節(jié)點(diǎn)鄙信。class Demo extends React.Component{?

//React.createRef調(diào)用后可以返回一個(gè)容器瞪醋,該容器可以存儲(chǔ)被ref所標(biāo)示的節(jié)點(diǎn),該容器是專(zhuān)人專(zhuān)用的?

myRef = React.createRef()? //展示輸入框的數(shù)據(jù)

showData = () => {? ?

alert(this.myRef.current.value)?

}? render(){?

return{? ?

<div>? ? ? <input ref={this.myRef}? type="text" />? ? ?

? <button onClick={this.showData}>點(diǎn)我展示數(shù)據(jù)</button>? ?

</div>? ?

}? }}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末装诡,一起剝皮案震驚了整個(gè)濱河市银受,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸦采,老刑警劉巖宾巍,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渔伯,居然都是意外死亡顶霞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)咱旱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)确丢,“玉大人绷耍,你說(shuō)我怎么就攤上這事吐限。” “怎么了褂始?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵诸典,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我崎苗,道長(zhǎng)狐粱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任胆数,我火速辦了婚禮肌蜻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘必尼。我一直安慰自己蒋搜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布判莉。 她就那樣靜靜地躺著豆挽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪券盅。 梳的紋絲不亂的頭發(fā)上帮哈,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音锰镀,去河邊找鬼娘侍。 笑死咖刃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憾筏。 我是一名探鬼主播僵缺,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踩叭!你這毒婦竟也來(lái)了磕潮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤容贝,失蹤者是張志新(化名)和其女友劉穎自脯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斤富,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膏潮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了满力。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焕参。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖油额,靈堂內(nèi)的尸體忽然破棺而出叠纷,到底是詐尸還是另有隱情,我是刑警寧澤潦嘶,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布涩嚣,位于F島的核電站,受9級(jí)特大地震影響掂僵,放射性物質(zhì)發(fā)生泄漏航厚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一锰蓬、第九天 我趴在偏房一處隱蔽的房頂上張望幔睬。 院中可真熱鬧,春花似錦芹扭、人聲如沸麻顶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澈蚌。三九已至,卻和暖如春灼狰,著一層夾襖步出監(jiān)牢的瞬間宛瞄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留份汗,地道東北人盈电。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杯活,于是被迫代替她去往敵國(guó)和親匆帚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容