React官網(wǎng)學習實踐 - Refs & DOM

在典型的 React 數(shù)據(jù)流中, 屬性(props)是父組件與子代交互的唯一方式。要修改子組件,你需要通用新的 props 重新渲染它。但是,某些情況下你需要在典型數(shù)據(jù)流外強制修改子代。要修改的子代可以是 React 組件實例,也可以是 DOM 元素。

何時使用 Refs

下面是幾個適合使用 refs 的情況:

處理焦點、文本選擇或媒體控制。
觸發(fā)強制動畫。
集成第三方 DOM 庫

如果可以通過聲明式實現(xiàn),則盡量避免使用 refs。

例如,不要在 Dialog 組件上直接暴露 open() 和 close() 方法,最好傳遞 isOpen 屬性。

不要過度使用 Refs

為 DOM 元素添加 Ref

class CustomTextInput extends React.Component {
  constructor(props) {
    super(props);
    this.focus = this.focus.bind(this);
  }

  focus() {
    // 直接使用原生 API 使 text 輸入框獲得焦點
    this.textInput.focus();
  }

  render() {
    // 使用 `ref` 的回調將 text 輸入框的 DOM 節(jié)點存儲到 React 
    // 實例上(比如 this.textInput)
    return (
      <div>
        <input
          type="text"
          ref={(input) => { this.textInput = input; }} />
        <input
          type="button"
          value="Focus the text input"
          onClick={this.focus}
        />
      </div>
    );
  }
}

為類組件添加 Ref

class AutoFocusTextInput extends React.Component {
  componentDidMount() {
    this.textInput.focus();
  }

  render() {
    return (
      <CustomTextInput
        ref={(input) => { this.textInput = input; }} />
    );
  }
}

如果覺得文章寫得還行,請點個贊。如果想與我進一步交流,可以關注我的公眾號或者加我的微信。

個人微信

公眾號_前端微說.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,190評論 2 35
  • 3. JSX JSX是對JavaScript語言的一個擴展語法, 用于生產React“元素”,建議在描述UI的時候...
    pixels閱讀 2,983評論 0 24
  • refs提供了一種方法,用于訪問在render中創(chuàng)建的dom節(jié)點或者React元素。 在典型的React數(shù)據(jù)流中,...
    XKolento閱讀 1,482評論 0 3
  • 40、React 什么是React?React 是一個用于構建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,196評論 0 1
  • 3月21日,星期三,情 今天下午又沒出去賣水果,去學校開的家委會會議,剛進二樓會議室我就搶著簽上了名字,然...
    田坤爸爸閱讀 245評論 0 2

友情鏈接更多精彩內容