Refs

Refs提供了一種訪問DOM節(jié)點或在render方法中創(chuàng)建的React元素的方法规揪。

refsReact組件中非常特殊的props,可以附加在任何一個組件上迷帜。組件被調(diào)用時會新建一個該組件的實例口叙,而refs就會指向這個實例。

react\lib\ReactBaseClasses.js文件中织盼,可以看出每個組件都存在refs屬性。

/**
 * Base class helpers for the updating state of a component.
 */
function ReactComponent(props, context, updater) {
  this.props = props;
  this.context = context;
  this.refs = emptyObject;
  // We initialize the default updater but the real one gets injected by the
  // renderer.
  this.updater = updater || ReactNoopUpdateQueue;
}

在React組件上添加refs

1.使用字符串的方式添加refs
格式:ref='string'

import React, { Component } from 'react';
import './App.css';
import ReactDOM from 'react-dom';

class Children extends Component {
  render() {
    return <div>
      子組件
    </div>
  }
}
class App extends Component {s

  render() {
    return (
      <div className="App">
        {/* 使用字符串方式 */}
        <Children ref='children' />
      </div>
    );
  }

  componentDidMount() {
    console.log(this);
    console.log('*******************************');
    console.log(this.refs.children);
  }
}

輸出結(jié)果:


在這里插入圖片描述

refs 可以是字符串酱塔,同樣可以是回調(diào)函數(shù)沥邻。

2.使用 回調(diào)函數(shù) 的方式添加refs
render方法修改如下:

render() {
    return (
      <div className="App">
        {/* 使用字符串方式 */}
        {/* <Children ref='childern' /> */}
        {/* 使用回調(diào)函數(shù)方式 */}
        <Children ref={ref=>this.childrenRef=ref} />
      </div>
    );
  }
在這里插入圖片描述

想要獲取當(dāng)前React組件的實例(引用)可以使用this,獲取所擁有子組件的實例(引用)可以使用refs羊娃。

React組件上添加refs唐全,獲取到的是組件的實例。而如果在原生的Dom組件上添加refs獲取到的事什么呢?接著看

在DOM元素上添加refs

class App extends Component {

  constructor(props){
    super(props);
  }

  render() {
    return (
      <div className="App">
        <input type='text' ref='input'/>
      </div>
    );
  }

  componentDidMount() {
    console.log(this);
    console.log('*******************************');
    console.log(this.refs.input);
  }
}

結(jié)果如下:


在這里插入圖片描述

使用回調(diào)函數(shù)同理邮利,獲取到的都是DOM節(jié)點弥雹。

Refs 和函數(shù)組件

refs無法應(yīng)用于函數(shù)組件(無狀態(tài)組件),因為函數(shù)組件掛載時只是方法調(diào)用延届,沒有新建實例剪勿。

如果需要引用它,則應(yīng)該將組件轉(zhuǎn)換為類方庭,就像您需要生命周期方法或狀態(tài)時一樣厕吉。

但是,只要引用DOM元素或類組件械念,就可以在函數(shù)組件中使用ref屬性

參考文檔

Refs and the DOM
《深入React技術(shù)椡分欤》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市龄减,隨后出現(xiàn)的幾起案子项钮,更是在濱河造成了極大的恐慌,老刑警劉巖希停,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁巫,死亡現(xiàn)場離奇詭異,居然都是意外死亡脖苏,警方通過查閱死者的電腦和手機(jī)程拭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棍潘,“玉大人恃鞋,你說我怎么就攤上這事∫嗲福” “怎么了恤浪?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肴楷。 經(jīng)常有香客問我水由,道長晶乔,這世上最難降的妖魔是什么芍锚? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮莹痢,結(jié)果婚禮上呵恢,老公的妹妹穿的比我還像新娘鞠值。我一直安慰自己,他們只是感情好渗钉,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布彤恶。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪声离。 梳的紋絲不亂的頭發(fā)上芒炼,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音术徊,去河邊找鬼本刽。 笑死,一個胖子當(dāng)著我的面吹牛弧关,可吹牛的內(nèi)容都是我干的盅安。 我是一名探鬼主播唤锉,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼世囊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窿祥?” 一聲冷哼從身側(cè)響起株憾,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晒衩,沒想到半個月后嗤瞎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡听系,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年贝奇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靠胜。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掉瞳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浪漠,到底是詐尸還是另有隱情陕习,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布址愿,位于F島的核電站该镣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏响谓。R本人自食惡果不足惜损合,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娘纷。 院中可真熱鬧嫁审,春花似錦、人聲如沸失驶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至擦耀,卻和暖如春棉圈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背眷蜓。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工分瘾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吁系。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓德召,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汽纤。 傳聞我的和親對象是個殘疾皇子上岗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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

  • refs提供了一種方法,用于訪問在render中創(chuàng)建的dom節(jié)點或者React元素蕴坪。 在典型的React數(shù)據(jù)流中肴掷,...
    XKolento閱讀 1,409評論 0 3
  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,050評論 2 35
  • refs提供了可以在render方法中訪問dom節(jié)點和創(chuàng)建的react元素的方法。 為了良好的閱讀體驗背传,請查看gi...
    mytac閱讀 420評論 0 1
  • ? 在常規(guī)的 React 數(shù)據(jù)六中呆瞻,props 是父組件與子組件交互的唯一方法。如果需要改子元素径玖,你需要用新的pr...
    果汁涼茶丶閱讀 965評論 0 0
  • 一切都是緣分痴脾,一切都是命運(yùn),一個南方小伙跑到了遙遠(yuǎn)的大北方去上學(xué)梳星。離開大連兩年了赞赖,再沒回去過,估計也不回去了丰泊,只有...
    珠江漁民閱讀 1,613評論 3 6