React 基礎(chǔ)知識(shí)學(xué)習(xí)

Props(屬性)和 State(狀態(tài))

1.1 Props(屬性)

Props 屬性用于把父組件的中的數(shù)據(jù)或者方法傳遞給子組件澳迫,供子組件使用橄登,他是一個(gè)簡(jiǎn)單的結(jié)構(gòu)對(duì)象。在子組件的生命周期內(nèi)是不可改變的谣妻。

1.2 State(狀態(tài))

State 是組件的內(nèi)部狀態(tài)卒稳,State 的變化最終將反應(yīng)到組件的 UI 變化上,通常是在組件的 constructor 中通過(guò) this.state 定義組件的初始狀態(tài)减江,通過(guò) this.setState 來(lái)改變組件的狀態(tài)捻爷。

1.2.1如何判斷變量是否屬于state

  1. 變量是否通過(guò)props獲取,如果是那么它不是 state
  2. 變量是否在整個(gè)生命周期內(nèi)保持不變茵休,如果是那么它不是 state
  3. 這個(gè)變量是否通過(guò)其他的state或者props計(jì)算得到手蝎,如果是那么它不是 state
  4. 這個(gè)變量是否在render中使用棵介,如果不是,如果是那么它不是 state

1.2.2 使用state 注意事項(xiàng)

  1. 不能通過(guò) this.state.{val} 來(lái)修改值唠雕,必須通過(guò) this.setState 來(lái)改變組件的狀態(tài)。
  2. state的更新是異步的
  3. this.setState 的更新是一個(gè)合并的過(guò)程钞脂,我們只需要傳入發(fā)生改變的 state 即可捕儒。

2 組件的定義

組件是react的核心概念,將應(yīng)用的 UI 拆分成獨(dú)立的阎毅、可復(fù)用的模塊点弯,React 應(yīng)用是由一個(gè)個(gè)組件搭建而成抢肛。

定義一個(gè)組件有兩種方式,使用Class (類組件)和 使用函數(shù)(函數(shù)組件)燃领。

2.1 Class 類組件

類組件的定義需要滿足以下兩個(gè)條件

  1. class 繼承自 React.Component
  2. class內(nèi)部必須定義 render 方法锦援,返回代表該組件的 UI 的 React 元素。
import React, { Component } from 'react';

class Text extends Component {
  render() {
    return (
      <View ></View>
    )
  }
}

2.2 有狀態(tài)組件和無(wú)狀態(tài)組件

state 是用來(lái)反映組件內(nèi)部狀態(tài)的變化曼库,如果一個(gè)組件內(nèi)容的狀態(tài)是不可變的略板,我們就不需要使用state叮称,這樣的組件稱為無(wú)狀態(tài)組件。反之赂韵,我們稱為有狀態(tài)組件挠蛉。

無(wú)狀態(tài)組件除了可以使用 class 來(lái)定義,也可以使用函數(shù)定義质涛,也就是函數(shù)組件。如下

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

在使用無(wú)狀態(tài)組件時(shí)怒炸,應(yīng)該盡量將其定義成函數(shù)組件瞬测。無(wú)狀態(tài)組件的使用不需要關(guān)心狀態(tài)的變化纠炮,只聚焦UI的展示恢口,無(wú)狀態(tài)組件更容易被復(fù)用。

3 組件的生命周期

組件的生命周期分為三個(gè)階段:掛載階段因妇、更新階段和卸載階段

3.1 掛載階段

組件執(zhí)行初始化被創(chuàng)建猿诸,并被掛載到 Dom 中,完成組件的第一次渲染址芯,依次執(zhí)行以下方法

(1) constructor
(2) componentWillMount
(3) render
(4) componentDidMount

constructor

class 的構(gòu)建方法窜觉,組件被創(chuàng)建時(shí)禀挫,首先會(huì)調(diào)用該方法,接收一個(gè)props參數(shù)描孟,props默認(rèn)是從父組件中傳入的屬性對(duì)象砰左,如果父組件沒(méi)有傳入菜职,props 指向的為組件的默認(rèn)屬性。需要優(yōu)先調(diào)用 super(props) 才能保證 props 被傳入組件中酬核。

該方法通常還用于 state 初始化和綁定事件處理方法等。

componentWillMount

該方法在組件被掛載 Dom 之前被調(diào)用举瑰,只會(huì)被調(diào)用一次此迅,在該方法中調(diào)用 this.setState 不會(huì)引起組件的重新渲染。一般很少使用忍些。

render

定義組件的唯一必須方法坎怪,返回一個(gè) UI 的描述搅窿,本身并不渲染 UI,真正的渲染出頁(yè)面 DOM 工作由 React 自身負(fù)責(zé)闹司。

componentDidMount

組件被掛載到 DOM 后調(diào)用沐飘,只會(huì)被調(diào)用一次。該方法常用于網(wǎng)絡(luò)請(qǐng)求众弓,在該方法中調(diào)用this.setState 會(huì)引起組件的重新渲染隔箍。

3.2 更新階段

組件被掛載到 Dom后蜒滩,組件的 props 或者 state 引起的組件更新。

props 引起的組件更新本質(zhì)上是由渲染該組件的父組件引起的捡遍,當(dāng)父組件的render方法被調(diào)用時(shí)竹握,無(wú)論子組件的props是否發(fā)生變化,都會(huì)導(dǎo)致組件的更新谓传。

state引起的組件更新是通過(guò)調(diào)用 this.setState 來(lái)觸發(fā)的

(1) componentWillReceiveProps
(2) shouldComponentUpdate
(3) componentWillUpdate
(4) render
(5) componentDidUpdate

componentWillReceiveProps(nextProps)

該方法只會(huì)在props引起的組件更新時(shí)被調(diào)用续挟,nextProps 是父組件傳遞的最新 propsnextProps 的值可能和當(dāng)前的 props 是一致的跑芳。因此需要比較兩者來(lái)決定是否需要更新直颅。

shouldComponentUpdate(nextProps, nextState)

該方法決定是否需要繼續(xù)執(zhí)行更新际乘。由返回值true和false控制漂佩。一般通過(guò)比較 nextPropsnextState 和 當(dāng)前組件的 props养葵、state 來(lái)決定是否需要更新瘩缆。從而達(dá)到一些性能優(yōu)化庸娱。

componentWillUpdate (nextProps, nextState)

該方法在執(zhí)行render之前調(diào)用,可在組件更新前執(zhí)行某些工作归露,很少用到斤儿。

componentDidUpdate(prevProps, prevState)

組件更新完成后被調(diào)用往果。prevPropsprevState 代表組件更新前的 props堕油、state

3.3 卸載階段

這個(gè)過(guò)程只有一個(gè)方法

(1) componentWillunmount

執(zhí)行一些清理工作例如定時(shí)器等掉缺,防止引起內(nèi)存泄漏

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末福也,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子攀圈,更是在濱河造成了極大的恐慌暴凑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赘来,死亡現(xiàn)場(chǎng)離奇詭異现喳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)犬辰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門嗦篱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人灸促,你說(shuō)我怎么就攤上這事『眩” “怎么了浴栽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)轿偎。 經(jīng)常有香客問(wèn)我典鸡,道長(zhǎng),這世上最難降的妖魔是什么坏晦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任萝玷,我火速辦了婚禮,結(jié)果婚禮上昆婿,老公的妹妹穿的比我還像新娘球碉。我一直安慰自己,他們只是感情好仓蛆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布睁冬。 她就那樣靜靜地躺著,像睡著了一般多律。 火紅的嫁衣襯著肌膚如雪痴突。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天狼荞,我揣著相機(jī)與錄音辽装,去河邊找鬼。 笑死相味,一個(gè)胖子當(dāng)著我的面吹牛拾积,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拓巧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼斯碌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肛度,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤傻唾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后承耿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體冠骄,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年加袋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凛辣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡职烧,死狀恐怖扁誓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚀之,我是刑警寧澤蝗敢,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站恬总,受9級(jí)特大地震影響前普,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壹堰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骡湖。 院中可真熱鬧贱纠,春花似錦、人聲如沸响蕴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浦夷。三九已至辖试,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劈狐,已是汗流浹背罐孝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肥缔,地道東北人莲兢。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親改艇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子收班,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 作為一個(gè)合格的開(kāi)發(fā)者,不要只滿足于編寫(xiě)了可以運(yùn)行的代碼谒兄。而要了解代碼背后的工作原理摔桦;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,441評(píng)論 1 33
  • 起步 安裝官方腳手架: npm install -g create-react-app 創(chuàng)建項(xiàng)目: create-...
    Twoold閱讀 1,221評(píng)論 0 0
  • 40、React 什么是React承疲?React 是一個(gè)用于構(gòu)建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,014評(píng)論 0 1
  • 生命周期流程圖簡(jiǎn)單如下: 組件讓你把用戶界面分成獨(dú)立的酣溃,可重復(fù)使用的部分,并且將每個(gè)部分分開(kāi)考慮纪隙。React.Co...
    Simple_Learn閱讀 1,079評(píng)論 0 0
  • 前言 組件中的state具體是什么?怎么更改state的數(shù)據(jù)? setState函數(shù)分別接收對(duì)象以及函數(shù)有什么區(qū)別...
    itclanCoder閱讀 880評(píng)論 0 0