react入門系列之ref的用法

react 中ref的使用

  1. 在此之前,我們使用時(shí)間對(duì)象e.target獲取觸發(fā)該事件的dom元素
  2. 在react中我們可以通過(guò)ref來(lái)獲得dom元素
  3. 用法
    1. 在需要獲取的dom元素標(biāo)簽中使用ref为鳄。
    2. 寫(xiě)法如下。
    3. 在js中就能直接使用this.div來(lái)得到div這個(gè)dom了敲才。
    render(){
        return(
            <div ref={(div) => { this.div = div}}></div>
        )
    }    
  1. 使用ref需要注意的地方。
    1. 通常情況我們?cè)陧?xiàng)目中盡量不要去使用ref择葡,但是有些時(shí)候做動(dòng)畫(huà)效果難免需要用紧武。
    2. 常常出現(xiàn)的一個(gè)坑就是,在你使用setState函數(shù)改變數(shù)據(jù)刁岸,頁(yè)面重新渲染脏里,你在setState函數(shù)后面操作dom她我,往往會(huì)出錯(cuò)虹曙。
    3. 為什么呢?前面我們有講過(guò)番舆,setState函數(shù)是一個(gè)異步函數(shù)酝碳。所以你直接在它后面操作dom,往往dom并不是渲染后的dom恨狈。
    4. 如何避免呢疏哗?setState提供了一個(gè)回調(diào)函數(shù),我們可以在回調(diào)函數(shù)中進(jìn)行數(shù)據(jù)操作禾怠。
import React, { Component, Fragment }from 'react';
import Item from './item.js'

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      inputValue: '',// 用來(lái)存儲(chǔ) input框中的 value值返奉。
      list:[] // 用來(lái)存儲(chǔ) 每一個(gè)li的 value值贝搁。
    }
  }
  handleInputChange = (e) => {
    // const value = e.target.value;
    const value = this.input.value;
    this.setState(() => ({inputValue: value}))//新版的react中的setState()函數(shù)可以接收一個(gè)函數(shù),箭頭函數(shù)的函數(shù)體使用()包裹可以省略return
  }
  addList = () => {
    this.setState((prevState) => { // 同時(shí)setState函數(shù)還提供一個(gè)prevState參數(shù)芽偏,這個(gè)參數(shù)代表未改變之前的this.state
      const list = [...prevState.list, prevState.inputValue];
      return {
        list,
        inputValue: '' // 添加完畢以后清空input框
      }
    })
  }
  deletListItem = (index) => { // 因?yàn)樵诮壎ㄔ摲椒ǖ臅r(shí)候使用了bind函數(shù)雷逆,所以這里可以不實(shí)用箭頭函數(shù)去保證this的指向
    this.setState((prevState) => {
      let list = [...prevState.list];
      list.splice(index, 1);
      return {list};
    },() => {
      console.log('item',this.item) // setState函數(shù)的回調(diào)
    })
  }
  getItem = () => {
    return (
      this.state.list.map((item, index) => {
        return(
          <Item 
          key = {index}
          value = {item} 
          index = {index}
          deletItem = {this.deletListItem}
          ref = {(item) => {this.item = item} }
          ></Item>
        )
      })
    )
  }
  render(){
    return (
      <Fragment>
      <div>
        <input
        onChange = { this.handleInputChange }
        value = {this.state.inputValue} 
        ref = {(input) => {this.input = input}}
        />
        <button onClick = { this.addList }>提交</button>
      </div>
      <ul>
        {this.getItem()}
      </ul>
      </Fragment>
    );
  }
}
export default App;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市污尉,隨后出現(xiàn)的幾起案子膀哲,更是在濱河造成了極大的恐慌,老刑警劉巖被碗,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件某宪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锐朴,警方通過(guò)查閱死者的電腦和手機(jī)兴喂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)包颁,“玉大人瞻想,你說(shuō)我怎么就攤上這事∶浣溃” “怎么了蘑险?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)岳悟。 經(jīng)常有香客問(wèn)我佃迄,道長(zhǎng),這世上最難降的妖魔是什么贵少? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任呵俏,我火速辦了婚禮,結(jié)果婚禮上滔灶,老公的妹妹穿的比我還像新娘普碎。我一直安慰自己,他們只是感情好录平,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布麻车。 她就那樣靜靜地躺著,像睡著了一般斗这。 火紅的嫁衣襯著肌膚如雪动猬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天表箭,我揣著相機(jī)與錄音赁咙,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛彼水,可吹牛的內(nèi)容都是我干的崔拥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凤覆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼握童!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起叛赚,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤澡绩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后俺附,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肥卡,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年事镣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步鉴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璃哟,死狀恐怖氛琢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情随闪,我是刑警寧澤阳似,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站铐伴,受9級(jí)特大地震影響撮奏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜当宴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一畜吊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧户矢,春花似錦玲献、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驱证,卻和暖如春延窜,著一層夾襖步出監(jiān)牢的瞬間恋腕,已是汗流浹背抹锄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伙单。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓获高,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吻育。 傳聞我的和親對(duì)象是個(gè)殘疾皇子念秧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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