React 的幾個注意點

受控組件和無狀態(tài)組件

  • 非受控組件

    • 推薦使用受控組件來實現(xiàn)表單. 在受控組件中, 表單數(shù)據(jù)是有React組件處理
    • 如果讓表單數(shù)據(jù)有DOM處理時, 替代方案為使用非受控組件
    • <input type="text" ref={input =>this._name = input} /> 如是, 不通過value控制其值,
  • 受控組件

    • <input type="text" value={this.state.name} onChange={this.handleNameChange}/>
    • 以上handleNameChange獲取輸入的值 this.setState({ name: event.target.value }); 賦值給state, 然后在觸發(fā)刷新, 對用input的value賦新的值
  • 無狀態(tài)組件

    • 語法簡潔, 占內(nèi)存小(少了class的諸多屬性), 無副作用(純函數(shù)), 函數(shù)式寫法(柯里化)

    • 函數(shù)式組件: 使用props

      function Welcome(props) { return <h1>Hello, {props.name}</h1>; }

    • 狀態(tài)組件/類組件的優(yōu)點:

      • 可以使用this
      • 擁有局部狀態(tài): this.state
      • 聲明周期鉤子

生命周期流程

  • 父子組件嵌套的生命周期, 先初始化父組件, 在父組件的render組件中初始化子組件, 當子組件都創(chuàng)建完成后(都完成了componentDidMount方法后) 父組件執(zhí)行componentDidMount

  • 啟動過程

    father constructor
    father componentWillMount
    father render
    son constructor
    son componentWillMount
    son render
    son componentDidMount
    father componentDidMount
    
  • 組件更新過程

    son componentWillReceiveProps
    son shouldComponentUpdate 根據(jù)返回值 true/false 決定是否繼續(xù)執(zhí)行
    son componentWillUpdate
    son render
    son componentDidUpdate
    

    ?

setState() 執(zhí)行流程, 生命周期.

  • 從源碼全面剖析 React 組件更新機制---這個說的好,可以多看幾遍

  • 利用隊列機制管理state, 避免重復的view刷新

  • replaceState({}) 會完全替代原有的state, setState不會影響未涉及的state

  • 如果組件正處于創(chuàng)建或更新組件階段,則把新的更新放入dirtyComponents稍后處理

    • 故getInitialState忍弛,componentWillMount今穿, render的畴,componentWillUpdate 中setState都不會引起updateComponent。但在componentDidMount和componentDidUpdate中則會。
  • 主要流程如下

    • 1.enqueueSetState將state放入隊列中,并調(diào)用enqueueUpdate處理要更新的Component

    • 2.如果組件當前正處于update事務中,則先將Component存入dirtyComponent中并齐。否則調(diào)用batchedUpdates處理。

    • 3.batchedUpdates發(fā)起一次transaction.perform()事務

    • 4.開始執(zhí)行事務初始化,運行况褪,結束三個階段

      • 1.初始化:事務初始化階段沒有注冊方法撕贞,故無方法要執(zhí)行

      • 2.運行:執(zhí)行setSate時傳入的callback方法,一般不會傳callback參數(shù),

      • 3.結束:更新isBatchingUpdates為false窝剖,并執(zhí)行FLUSH_BATCHED_UPDATES這個wrapper中的close方法

      • FLUSH_BATCHED_UPDATES在close階段麻掸,會循環(huán)遍歷所有的dirtyComponents,調(diào)用updateComponent刷新組件赐纱,并執(zhí)行它的pendingCallbacks, 也就是setState中設置的callback脊奋。第二個參數(shù)?
        
  • 我的理解: setState 修改state是異步操作, 意思就是不能立即獲取this.state 修改的值, 當調(diào)用了setState后,把本次操作放入隊列中, 如果組件未在創(chuàng)建/更新,那么立即執(zhí)行更新流程, 如果組件在刷新,那么本次更新操作放入稍后執(zhí)行的隊列中等待執(zhí)行.

  • 批處理時會把待處理數(shù)組中每一個操作從第一個依次傳遞給后一個,直到待處理操作為空,把最后的結果設置給state

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疙描,隨后出現(xiàn)的幾起案子诚隙,更是在濱河造成了極大的恐慌,老刑警劉巖起胰,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件久又,死亡現(xiàn)場離奇詭異,居然都是意外死亡效五,警方通過查閱死者的電腦和手機地消,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畏妖,“玉大人脉执,你說我怎么就攤上這事〗浣伲” “怎么了半夷?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅细。 經(jīng)常有香客問我巫橄,道長,這世上最難降的妖魔是什么茵典? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任湘换,我火速辦了婚禮,結果婚禮上统阿,老公的妹妹穿的比我還像新娘枚尼。我一直安慰自己,他們只是感情好砂吞,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崎溃,像睡著了一般蜻直。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天概而,我揣著相機與錄音呼巷,去河邊找鬼。 笑死赎瑰,一個胖子當著我的面吹牛王悍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播餐曼,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼压储,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了源譬?” 一聲冷哼從身側響起集惋,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踩娘,沒想到半個月后刮刑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡养渴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年雷绢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理卑。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡翘紊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傻工,到底是詐尸還是另有隱情霞溪,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布中捆,位于F島的核電站鸯匹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泄伪。R本人自食惡果不足惜殴蓬,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟋滴。 院中可真熱鬧染厅,春花似錦、人聲如沸津函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔苦。三九已至涩馆,卻和暖如春行施,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魂那。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工蛾号, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涯雅。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓鲜结,卻偏偏與公主長得像,于是被迫代替她去往敵國和親活逆。 傳聞我的和親對象是個殘疾皇子精刷,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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

  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼划乖。而要了解代碼背后的工作原理贬养;不要只滿足于自己的程序...
    六個周閱讀 8,422評論 1 33
  • 說在前面 關于 react 的總結過去半年就一直碎碎念著要搞起來,各(wo)種(tai)原(lan)因(le)琴庵。心...
    陳嘻嘻啊閱讀 6,846評論 7 41
  • 已經(jīng)是高三的下學期误算,顧安也每天只睡五個小時,她不得不拼命迷殿,因為她很清楚儿礼,這是她唯一能夠咸魚翻身的機會。班上...
    鹿崝閱讀 478評論 0 0
  • 中老年人在5點半庆寺,就生物鐘自動醒來蚊夫。 熱情飽滿地趕往了老年人活動中心~ 發(fā)現(xiàn)太早沒有開門后,匆匆吃了個貴價早餐(1...
    丸子Sophia閱讀 203評論 0 0
  • 小時候以為世界就那么大懦尝,長大了才知道知纷,原來世界沒有邊界。 開始渴望能早早的等來一班車陵霉,哪怕是最后一班琅轧,也...
    dumpling_閱讀 203評論 0 1