React ref屬性

一、用途

ref屬性允許我們使用react操作真實(shí)DOM

二、用法

<input ref={(input) => this.input = input}/> 

ref屬性的值是一個(gè)箭頭函數(shù),參數(shù)接收真實(shí)的DOM
通過(guò)ref將this.input設(shè)置為input標(biāo)簽,那么在方法中就可以直接操縱它

useDom(){
  console.log(this.input)
}

三、注意事項(xiàng)

由于setState方法是異步的,所以DOM操作應(yīng)該放在setState中的回調(diào)函數(shù)中進(jìn)行。

<ul ref={(ul) => this.ul = ul}>
        {
            this.getTodoItem()
        }
</ul>

上面是一個(gè)列表,有一個(gè)按鈕點(diǎn)擊后就打印ul中l(wèi)i的個(gè)數(shù)

// 提交按鈕處理函數(shù)
handleBtnClick(){
    // preState相當(dāng)于this.state
    this.setState((preState) => ({
        list: [...preState.list, preState.inputValue],
        inputValue: ''
    }))
    console.log(this.ul.querySelectorAll('li').length)
}

運(yùn)行會(huì)發(fā)現(xiàn),打印的結(jié)果不正確,總是比真實(shí)的li少一個(gè)。這是因?yàn)閟etState是異步執(zhí)行的,console.log()比setState早運(yùn)行。
正確的寫(xiě)法是:

// 提交按鈕處理函數(shù)
handleBtnClick(){
    // preState相當(dāng)于this.state
    this.setState((preState) => ({
        list: [...preState.list, preState.inputValue],
        inputValue: ''
    }), function(){
        console.log(this.ul.querySelectorAll('li').length)
    })
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • React Refs React 支持一種非常特殊的屬性 Ref ,你可以用來(lái)綁定到 render() 輸出的任何...
    Android_馮星閱讀 14,383評(píng)論 1 4
  • (1)例子要求:完成 Post 組件,接受一個(gè)字符串的 content 作為 props,Post 會(huì)把它顯示到自...
    夜息白鴿閱讀 415評(píng)論 0 0
  • 前端開(kāi)發(fā)面試題 <a name='preface'>前言</a> 只看問(wèn)題點(diǎn)這里 看全部問(wèn)題和答案點(diǎn)這里 本文由我...
    自you是敏感詞閱讀 786評(píng)論 0 3
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門(mén)級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,611評(píng)論 0 7
  • 風(fēng)雷劇情體驗(yàn)館 現(xiàn)代密室逃脫精品店 位于昆明市 五華區(qū) 東風(fēng)西路444號(hào) 設(shè)計(jì)作品有 招魂 招魂2 招魂番外篇宅地...
    密室設(shè)計(jì)師閱讀 778評(píng)論 0 0