[ES6]react中使用es6語(yǔ)法

前言

不論是React還是React-native,facebook官方都推薦使用ES6的語(yǔ)法煌张,沒在項(xiàng)目中使用過的話,突然轉(zhuǎn)換過來會(huì)遇到一些問題庵楷,如果還沒有時(shí)間系統(tǒng)的學(xué)習(xí)下ES6那么注意一些常見的寫法暫時(shí)也就夠用的,這會(huì)給我們的開發(fā)帶來很大的便捷蹂随,你會(huì)體驗(yàn)到ES6語(yǔ)法的無比簡(jiǎn)潔锹漱。下面就介紹我在react和react-native中從ES5轉(zhuǎn)到ES6中體會(huì)到的幾個(gè)對(duì)比佩谷。

ES6寫組件的區(qū)別

直接在React v0.13.0 Beta 1中一個(gè)官方的演示來說明:

export class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
  }
  tick() {
    this.setState({count: this.state.count + 1});
  }
  render() {
    return (
      <div onClick={this.tick.bind(this)}>
        Clicks: {this.state.count}
      </div>
    );
  }
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };

和React.createClass方法來創(chuàng)建組件對(duì)比一下:

const Counter = React.createClass ({
  getDefaultProps : function () {
    return {
      initialCount : 0
    };
  },
  propTypes: {
   initialCount: React.PropTypes.number
  },
  
  getInitialState: function() {
    return { count:  this.props.initialConunt};
  },
  tick: function() {
    this.setState({count: this.state.count + 1});
  },
  render: function() {
    return (
      <div onClick={this.tick}>
        Clicks: {this.state.count}
      </div>
    );
  }
})

主要有三個(gè)區(qū)別:

創(chuàng)建組件的方法

用class聲明來取代了React.createClass腋逆,這里簡(jiǎn)潔了許多婿牍。

props

  1. ES6中需要用在constructor中有super(props)來傳遞props。
  2. ES6中g(shù)etDefaultProps是class的屬性而不是方法惩歉,不能定義在組件內(nèi)部等脂,需要單獨(dú)寫在外面。
  3. 同理撑蚌,ES6中propTypes也需要寫在外面上遥。

state

ES6不在需要getInitialState方法,而是直接在constructor中直接用this.state即可争涌,更加方便露该。

this的綁定

這段代碼采用了ES6后其中onClick={this.tick.bind(this)這里需要采用bind方法來綁定this,如果不綁定this第煮,this.tick方法的this就會(huì)指向全局解幼,綁定了this之后將this綁定到組件實(shí)例之上。但是我們應(yīng)該還記得js中bind方法每運(yùn)行一次就返回一個(gè)新的函數(shù)包警,在react中也就是每次render都會(huì)創(chuàng)建一個(gè)新的函數(shù)撵摆,所以我們最好將其綁定constructor中:

export class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
    this.tick = this.tick.bind(this);
  }
  tick() {
    this.setState({count: this.state.count + 1});
  }
  render() {
    return (
      <div onClick={this.tick}>
        Clicks: {this.state.count}
      </div>
    );
  }
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };

這樣只會(huì)創(chuàng)建一次。當(dāng)然這樣寫略顯繁瑣害晦,有沒有更好的方法呢特铝? 當(dāng)然! ES6為我們提供了箭頭函數(shù)壹瘟,根本不需要在綁定this這種操作了鲫剿。

export class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
  }
  tick = () => {
    this.setState({count: this.state.count + 1});
  }
  render() {
    return (
      <div onClick={this.tick}>
        Clicks: {this.state.count}
      </div>
    );
  }
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };

箭頭函數(shù)不會(huì)創(chuàng)建自身的this上下文,this就指向組件實(shí)例稻轨。建議就用箭頭函數(shù)灵莲,代碼會(huì)精簡(jiǎn)很多。

總結(jié)

知道這幾點(diǎn)區(qū)別以后殴俱,再去找個(gè)教程熟悉下ES6的語(yǔ)法政冻,基本就可以用ES6來寫react了,感覺js的標(biāo)準(zhǔn)越來越向java和python等靠近线欲,前端后端都要融合了哈哈明场。

參考

  1. react中this
  2. bind方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市李丰,隨后出現(xiàn)的幾起案子苦锨,更是在濱河造成了極大的恐慌,老刑警劉巖趴泌,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟舒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踱讨,警方通過查閱死者的電腦和手機(jī)魏蔗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痹筛,“玉大人莺治,你說我怎么就攤上這事≈愠恚” “怎么了谣旁?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滋早。 經(jīng)常有香客問我榄审,道長(zhǎng),這世上最難降的妖魔是什么杆麸? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任搁进,我火速辦了婚禮浪感,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饼问。我一直安慰自己影兽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布莱革。 她就那樣靜靜地躺著峻堰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盅视。 梳的紋絲不亂的頭發(fā)上捐名,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音闹击,去河邊找鬼镶蹋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拇砰,可吹牛的內(nèi)容都是我干的梅忌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼除破,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼牧氮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瑰枫,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤踱葛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后光坝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尸诽,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年盯另,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了性含。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸳惯,死狀恐怖商蕴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芝发,我是刑警寧澤绪商,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站辅鲸,受9級(jí)特大地震影響格郁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一例书、第九天 我趴在偏房一處隱蔽的房頂上張望锣尉。 院中可真熱鬧,春花似錦雾叭、人聲如沸悟耘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至筏勒,卻和暖如春移迫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背管行。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工厨埋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捐顷。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓荡陷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迅涮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子废赞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 本筆記基于React官方文檔,當(dāng)前React版本號(hào)為15.4.0叮姑。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,700評(píng)論 14 128
  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,061評(píng)論 2 35
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí)唉地,對(duì)React的特性、重點(diǎn)和注意事項(xiàng)的提取传透、精練和總結(jié)耘沼,可以做為React特性...
    科研者閱讀 8,232評(píng)論 2 21
  • GUIDS 第一章 為什么使用React? React 一個(gè)提供了用戶接口的JavaScript庫(kù)朱盐。 誕生于Fac...
    jplyue閱讀 3,532評(píng)論 1 11
  • 悅悅樂閱讀 115評(píng)論 0 0