了解React中的refs

鎏金哇開呀酷烈——神龍啊吞噬我的敵人吧

refs這部分是在做公司一個小組件(視頻彈框蒙層)時候遇到的,是react進階部分內(nèi)容,學(xué)習(xí)內(nèi)容與心得整理如下,歡迎指正!

為什么要使用refs

在正常的 react 數(shù)據(jù)流中,props 是父組件與子元素交互的唯一渠道。如果想要修改子元素,你需要通過一個新的 props 進行重新渲染。但是,在一些情境下,你需要在正常數(shù)據(jù)流外強行修改子元素,這時,你就需要用到 refs。修改的子元素可以是react組件的實例,也可以是DOM元素。

有點生澀?那我來舉例子:

<VideoPlay url="www.hclzx.com" />
<button>pause</button>

class VideoPlay extends React.Component{
    render(){
        <video src={this.props.url}>我是視頻</video>
    }
}

如上面的代碼,組件 VideoPlay中是視頻的URL,它與其子元素 video 之間溝通僅依靠 props ,如果我想修改子元素 video 的URL鏈接,只能通過修改組件 VideoPlay中的 url 屬性來進行。然而,此時需求是當(dāng)我點擊按鈕的時候,需要對視頻進行暫停。這個暫停的動作不可能通過更改 props 然后重新渲染頁面來實現(xiàn)。這時我就需要在子元素 video 中加入一個屬性 ref 來進行強制修改。react將這個 refs 叫做 緊急艙口 。

什么時候使用refs

  • 管理焦點、文本選擇或媒體回放。

  • 觸發(fā)命令動畫。

  • 與第三方DOM庫集成。

  • tip:

    1. 不要濫用。在使用 refs 時,首先應(yīng)該清使用它是為了讓某種功能在你的APP中得到實現(xiàn)。你需要想清楚在哪里私有化 state。經(jīng)驗來看,最合適的地方是在層級的更高層。(這里有疑問,先放在這里)
    2. 避免干擾。在使用 refs 時,應(yīng)該避免使用保留字或者已經(jīng)被使用的API字段;

用法(加班,未完待續(xù)。。。)

1. 為DOM元素增加 refs

2. 為組件 (Component) 增加 refs

以下所有的內(nèi)容均參考自 react_Refs and the DOM

鎏金哇開呀酷烈——神龍啊吞噬我的敵人吧
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,183評論 2 35
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,945評論 1 18
  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,408評論 0 2
  • 自己最近的項目是基于react的,于是讀了一遍react的文檔,做了一些記錄(除了REFERENCE部分還沒開始讀...
    潘逸飛閱讀 3,741評論 1 10
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時,對React的特性、重點和注意事項的提取、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,409評論 2 21

友情鏈接更多精彩內(nèi)容