React文檔筆記day06

昨天立的flag排嫌,今天搞起來

事件處理

在React中事件處理和一般的DOM的事件處理特別相似契讲,但是也是有一些語法上面的不同

  • React中是用的駝峰命名仿吞,在DOM中則是小寫命名
  • 在JSX中你是傳遞一個(gè)函數(shù),在DOM則是傳遞的一個(gè)字符串
    ??:
    在HTML中
<button onclick="activateLasers()">
  Activate Lasers
</button>

在React中

<button onClick={activateLasers}>
  Activate Lasers
</button>

還有一個(gè)不同的地方是捡偏,您能夠使用return false 來阻止系統(tǒng)默認(rèn)事件唤冈。必須調(diào)用preventDefault函數(shù)。再來一個(gè)??银伟,在點(diǎn)擊a標(biāo)簽的時(shí)候阻止默認(rèn)跳轉(zhuǎn)新頁面的事件
在HTML中:

<a href="#" onclick="console.log('The link was clicked.'); return false">
  Click me
</a>

在React中:

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();
    console.log('The link was clicked.');
  }

  return (
    <a href="#" onClick={handleClick}>
      Click me
    </a>
  );
}

在使用React的時(shí)候不需要立刻就添加監(jiān)聽(addEventListener)你虹,而是在元素被渲染到界面的時(shí)候添加監(jiān)聽

在使用ES6定義一個(gè)類類型的組件的時(shí)候,通常的形式是事件處理將會(huì)成為這個(gè)類的一個(gè)方法彤避。
Toggle組件渲染了一個(gè)button傅物,這個(gè)button的標(biāo)題在on和off之間切換
??:

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // This binding is necessary to make `this` work in the callback
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);

這里要注意的有兩個(gè)地方,分別來分析一下琉预。

第一個(gè)

this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
}));

這里的prevState就是this.state,setState傳了一個(gè)函數(shù)進(jìn)入董饰,返回值是把當(dāng)前狀態(tài)取反。最后設(shè)置到相應(yīng)的字段上面去圆米。

第二個(gè)

constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // This binding is necessary to make `this` work in the callback
    this.handleClick = this.handleClick.bind(this);
  }

類的構(gòu)造方法里面出現(xiàn)了卒暂,之前沒見過的東西
this.handleClick = this.handleClick.bind(this);
這句話就是給綁定的事件添加監(jiān)聽,把this傳遞進(jìn)去才能在handleClick函數(shù)中使用this榨咐。

一定要注意this在JSX回調(diào)中的含義介却,在Javascript中類方法不會(huì)默認(rèn)綁定。如果忘記將this.handleClick綁定并且傳遞到了onClick块茁,this將會(huì)是undefined當(dāng)函數(shù)被調(diào)用的時(shí)候齿坷。

這不是React特有的屬性,這屬于js的方法調(diào)用準(zhǔn)則数焊。大體上來說永淌,如果引用了一個(gè)方法,這個(gè)方法后面沒有帶()佩耳,例如 onClick={this.handleClick}遂蛀,那么你就要把這個(gè)方法進(jìn)行綁定。

如果你覺得這個(gè)綁定很煩人干厚,很繁瑣李滴,有一些方法可以解決這個(gè)問題。
第一種

class LoggingButton extends React.Component {
  // This syntax ensures `this` is bound within handleClick.
  // Warning: this is *experimental* syntax.
  handleClick = () => {
    console.log('this is:', this);
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        Click me
      </button>
    );
  }
}

這種方法在React App中是默認(rèn)開啟的蛮瞄,這里有一個(gè)警告Warning: this is experimental syntax.不懂啥意思所坯。。挂捅。應(yīng)該是不建議這么用吧芹助。

還有一種方法,也有問題存在,可以忽略看此步驟

class LoggingButton extends React.Component {
  handleClick() {
    console.log('this is:', this);
  }

  render() {
    // This syntax ensures `this` is bound within handleClick
    return (
      <button onClick={(e) => this.handleClick(e)}>
        Click me
      </button>
    );
  }
}

這里的問題是每次當(dāng)組件被渲染的時(shí)候后就會(huì)重新創(chuàng)建一個(gè)回調(diào)函數(shù)状土。在大多數(shù)的情況下是沒有問題的无蜂,但是如果這里的回調(diào)作為一個(gè)props的參數(shù)向下傳遞到內(nèi)部組件中的時(shí)候,可能會(huì)造成額外的渲染蒙谓。

最后還是建議使用最開始講的那種方式斥季,雖然有些繁瑣,但是作為初學(xué)者累驮,最不容易踩到坑里泻肯。

傳遞參數(shù)

在一個(gè)循環(huán)的內(nèi)部,我們通常會(huì)傳遞額外的參數(shù)到事件處理中慰照。例如灶挟,??

<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>

上面兩種方法都是OK的,一種使用的是箭頭函數(shù)毒租,一種使用的是函數(shù)屬性綁定稚铣。

在箭頭函數(shù)中e表示React的事件,如果是箭頭函數(shù)中墅垮,我們必須明確的傳遞這個(gè)參數(shù)惕医,但是bind的方法是默認(rèn)自己傳遞這個(gè)參數(shù)的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末算色,一起剝皮案震驚了整個(gè)濱河市抬伺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灾梦,老刑警劉巖峡钓,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異若河,居然都是意外死亡能岩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門萧福,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拉鹃,“玉大人,你說我怎么就攤上這事鲫忍「嘌啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵悟民,是天一觀的道長(zhǎng)坝辫。 經(jīng)常有香客問我,道長(zhǎng)逾雄,這世上最難降的妖魔是什么阀溶? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鸦泳,結(jié)果婚禮上银锻,老公的妹妹穿的比我還像新娘。我一直安慰自己做鹰,他們只是感情好击纬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钾麸,像睡著了一般更振。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饭尝,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天肯腕,我揣著相機(jī)與錄音,去河邊找鬼钥平。 笑死实撒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涉瘾。 我是一名探鬼主播知态,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼立叛!你這毒婦竟也來了负敏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤秘蛇,失蹤者是張志新(化名)和其女友劉穎其做,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁还,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庶柿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秽浇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浮庐。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柬焕,靈堂內(nèi)的尸體忽然破棺而出审残,到底是詐尸還是另有隱情,我是刑警寧澤斑举,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布搅轿,位于F島的核電站,受9級(jí)特大地震影響富玷,放射性物質(zhì)發(fā)生泄漏璧坟。R本人自食惡果不足惜既穆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雀鹃。 院中可真熱鬧幻工,春花似錦、人聲如沸黎茎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傅瞻。三九已至踢代,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗅骄,已是汗流浹背胳挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溺森,地道東北人串远。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像儿惫,于是被迫代替她去往敵國(guó)和親澡罚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理肾请,服務(wù)發(fā)現(xiàn)留搔,斷路器,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 本筆記基于React官方文檔铛铁,當(dāng)前React版本號(hào)為15.4.0隔显。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,713評(píng)論 14 128
  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,070評(píng)論 2 35
  • react 基本概念解析 react 的組件聲明周期 react 高階組件,context, redux 等高級(jí)...
    南航閱讀 1,069評(píng)論 0 1
  • GUIDS 第一章 為什么使用React饵逐? React 一個(gè)提供了用戶接口的JavaScript庫括眠。 誕生于Fac...
    jplyue閱讀 3,538評(píng)論 1 11