react幾個(gè)你可能疑惑的地方

@1)每個(gè)文件都會(huì)有這么一句話 import React from 'react'

初學(xué)的人在這里會(huì)不會(huì)疑問逻澳,我的代碼中并沒有用到 React,為什么還有引入犬绒,可是當(dāng)我注釋掉這句話的時(shí)候程序就報(bào)錯(cuò)了
image.png
這是因?yàn)閞eact使用的是jsx來代替的常規(guī)的javascript,其實(shí)不難發(fā)現(xiàn)我們編寫的是js文件兑凿,在js文件中寫入類凯力,方法我們都可以理解,但是在return的括號(hào)里面的元素標(biāo)簽或者說是組件是不是會(huì)讓你一頭霧水呢礼华,這就是jsx(總的來說jsx其實(shí)是react的語法糖)也就是我圖上框住的部分咐鹤,那段jsx的代碼是可以寫成黃色框里的內(nèi)容的,但是我們的頁面那么多組件卓嫂,我們都這樣寫很快就會(huì)瘋掉的慷暂,頁面的代碼會(huì)非常不清晰,所以jsx正是為了方便我們不用寫這個(gè)樣子的代碼晨雳,然而jsx的代碼是需要被翻譯成黃色框中的代碼的行瑞,而這也是用到React的地方啦

@2)關(guān)于合成事件 event,不知道你有沒有這樣的困惑餐禁,如下代碼(e這個(gè)事件是哪里來的呢血久?)

function ActionLink() {
  // 注:這里的e是哪里來的呢?
  function handleClick(e) { 
    e.preventDefault();
    console.log('鏈接被點(diǎn)擊');
  }
  return (
    <a href="#" onClick={handleClick}>  //這里我并沒有傳入e這個(gè)參數(shù)
      點(diǎn)我
    </a>
  );
}

其實(shí)是這樣子的帮非,當(dāng)你從了解react開始就會(huì)聽說虛擬dom這個(gè)東西了吧氧吐,這里你沒有聽說過也沒有關(guān)系(這里一時(shí)半會(huì)也解釋不清,后面文章我會(huì)單獨(dú)去解釋這個(gè)東西末盔,你先知道有這么個(gè)東西)筑舅,就是這個(gè)虛擬dom實(shí)現(xiàn)了一個(gè)合成事件層,我們所定義的事件處理器會(huì)接收到這個(gè)合成事件處理對(duì)象的實(shí)例event且我們不用關(guān)心跨平臺(tái)的問題陨舱,再說白一點(diǎn)翠拣,就是我們定義一個(gè)函數(shù),只要我們把它交給類似onClick,onChange這樣的事件處理程序游盲,那么這個(gè)函數(shù)就會(huì)獲得event

@3)setState 在react中要想改變state我們是不可以這樣寫的this.state.value="hello world",而是要寫成this.setState({value:'hello world'})為什么呢误墓,這是因?yàn)閞eact的設(shè)計(jì)是用數(shù)據(jù)的改變來渲染頁面,如果數(shù)據(jù)一改變益缎,react就去渲染頁面谜慌,那這和jquery直接操作dom相比,依靠數(shù)據(jù)渲染頁面反而不會(huì)占優(yōu)勢(shì)了(因?yàn)閷?shí)質(zhì)都是修改dom)莺奔,setState并不會(huì)馬上就改變state,而是創(chuàng)建一個(gè)即將處理的state欣范,為了提升react的性能,會(huì)批量執(zhí)行state和dom的渲染,舉個(gè)例子(每當(dāng)你點(diǎn)擊文字的時(shí)候次數(shù)增加的是1而不是3)
image.png
總的來說就是react為提升性能的

@4)組件的生命周期熙卡,初學(xué)react的你是不是被componentWillMount/componentDidMount函數(shù)執(zhí)行一次杖刷,componentWillUpdate等函數(shù)在更新之前調(diào)用弄暈了呢,其實(shí)單單看函數(shù)的英譯驳癌,我們大概也猜出來意思,但是為什么在組建的生命周期中只執(zhí)行一次呢役听?這是因?yàn)閞eact為組件劃分了這么幾個(gè)階段如下圖
image.png

也就是說每個(gè)函數(shù)執(zhí)行是對(duì)應(yīng)上面的三個(gè)階段的(掛載→更新→卸載)這里組件更新階段shouldComponentUpdate()函數(shù)是可以阻止render()渲染的颓鲜,就是當(dāng)你state改變我們將這個(gè)函數(shù)的返回值設(shè)為false,你會(huì)發(fā)現(xiàn)頁面并沒有任何改變
@5)ref(reference)是react支持的一種非常特殊的屬性典予,你可以用來綁定到render()輸出的任何組件上甜滨,也就是你可以在任何時(shí)間能準(zhǔn)確的拿到綁定組件的實(shí)例,舉個(gè)例子
//首先這里的input這個(gè)參數(shù)是自動(dòng)接收的,它可以是任何的名字瘤袖,它代表<input></input>這個(gè)標(biāo)簽
//而this.input = input 也就是給當(dāng)前類實(shí)例TodoList中的this增加一個(gè)屬性input
//使其this.input屬性指向<input></input>實(shí)例
class TodoList extends Component{
  render(){
    return(
       <input ref={input => this.input = input}></input>
    )
  }
  changeValue = () =>{
    this.input.value = "hello world"
  }
}

@6)react中還有很多慢慢探索的細(xì)節(jié)衣摩,這里的總結(jié)是自己當(dāng)初學(xué)習(xí)迷惑的地方
react性能優(yōu)化部分(這里初學(xué)的時(shí)候可能不理解,但是后面代碼練習(xí)中你就會(huì)了解到啦)
1.this綁定捂敌,你可以使用es6 語法中的箭頭函數(shù)或者在構(gòu)造函數(shù)綁定this,而不是這樣綁定(onClick = {this.changValue.bind(this)})
2.setState設(shè)計(jì)成異步艾扮,這里在上面已經(jīng)講過啦,如果你還是不很理解的話也不要急
3.shouldCompentUpdate 這個(gè)函數(shù)可以阻止render函數(shù)的執(zhí)行占婉,頁面渲染也是相當(dāng)耗費(fèi)性能的泡嘴,這里在上面也已經(jīng)講過啦
4.虛擬dom,這個(gè)后面再寫吧逆济,先知道這個(gè)概念吧

初識(shí)react:http://www.reibang.com/p/b683a9bac335

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酌予,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奖慌,更是在濱河造成了極大的恐慌抛虫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件简僧,死亡現(xiàn)場(chǎng)離奇詭異建椰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涎劈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門广凸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛛枚,你說我怎么就攤上這事谅海。” “怎么了蹦浦?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵扭吁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)侥袜,這世上最難降的妖魔是什么蝌诡? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮枫吧,結(jié)果婚禮上浦旱,老公的妹妹穿的比我還像新娘。我一直安慰自己九杂,他們只是感情好颁湖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著例隆,像睡著了一般甥捺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镀层,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天镰禾,我揣著相機(jī)與錄音,去河邊找鬼唱逢。 笑死吴侦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惶我。 我是一名探鬼主播妈倔,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绸贡!你這毒婦竟也來了盯蝴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤听怕,失蹤者是張志新(化名)和其女友劉穎捧挺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尿瞭,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闽烙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了声搁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黑竞。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疏旨,靈堂內(nèi)的尸體忽然破棺而出很魂,到底是詐尸還是另有隱情,我是刑警寧澤檐涝,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布遏匆,位于F島的核電站法挨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幅聘。R本人自食惡果不足惜凡纳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帝蒿。 院中可真熱鬧荐糜,春花似錦、人聲如沸葛超。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巩掺。三九已至,卻和暖如春页畦,著一層夾襖步出監(jiān)牢的瞬間胖替,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工豫缨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留独令,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓好芭,卻偏偏與公主長(zhǎng)得像燃箭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舍败,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的裙戏。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評(píng)論 1 11
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南厕诡,這只是我在學(xué)習(xí)過程中的一些閱讀筆記累榜,個(gè)人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,835評(píng)論 1 18
  • 作為一個(gè)合格的開發(fā)者灵嫌,不要只滿足于編寫了可以運(yùn)行的代碼壹罚。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,448評(píng)論 1 33
  • 我們先來直觀認(rèn)識(shí)React寿羞,對(duì)任何而一種工具猖凛,只有使用才能夠熟練掌握,React也不例外稠曼。通過多Reac...
    六個(gè)周閱讀 1,198評(píng)論 3 18
  • 2 初進(jìn)小屋形病,是前年的5月19日客年。 此時(shí),我到北京已有一個(gè)禮拜了漠吻。我必須說明一下量瓜,這不是我第一次來北京,而是...
    路雨飛飛閱讀 382評(píng)論 0 3