React.js 小書(shū) Lesson12 - state vs props


React.js 小書(shū) Lesson12 - state vs props

本文作者:胡子大哈
本文原文:http://react.huziketang.com/blog/lesson12

轉(zhuǎn)載請(qǐng)注明出處,保留原文鏈接以及作者信息

在線閱讀:http://huziketang.com/books/react


我們來(lái)一個(gè)關(guān)于 stateprops 的總結(jié)。

state 的主要作用是用于組件保存务漩、控制缸匪、修改自己的可變狀態(tài)。state 在組件內(nèi)部初始化敏簿,可以被組件自身修改邑彪,而外部不能訪問(wèn)也不能修改。你可以認(rèn)為 state 是一個(gè)局部的骤宣、只能被組件自身控制的數(shù)據(jù)源秦爆。state 中狀態(tài)可以通過(guò) this.setState 方法進(jìn)行更新,setState 會(huì)導(dǎo)致組件的重新渲染憔披。

props 的主要作用是讓使用該組件的父組件可以傳入?yún)?shù)來(lái)配置該組件等限。它是外部傳進(jìn)來(lái)的配置參數(shù),組件內(nèi)部無(wú)法控制也無(wú)法修改芬膝。除非外部組件主動(dòng)傳入新的 props望门,否則組件的 props 永遠(yuǎn)保持不變。

stateprops 有著千絲萬(wàn)縷的關(guān)系锰霜。它們都可以決定組件的行為和顯示形態(tài)怒允。一個(gè)組件的 state 中的數(shù)據(jù)可以通過(guò) props 傳給子組件,一個(gè)組件可以使用外部傳入的 props 來(lái)初始化自己的 state锈遥。但是它們的職責(zé)其實(shí)非常明晰分明:state 是讓組件控制自己的狀態(tài)纫事,props 是讓外部對(duì)組件自己進(jìn)行配置

如果你覺(jué)得還是搞不清 stateprops 的使用場(chǎng)景所灸,那么請(qǐng)記住一個(gè)簡(jiǎn)單的規(guī)則:盡量少地用 state丽惶,盡量多地用 props

沒(méi)有 state 的組件叫無(wú)狀態(tài)組件(stateless component)爬立,設(shè)置了 state 的叫做有狀態(tài)組件(stateful component)钾唬。因?yàn)闋顟B(tài)會(huì)帶來(lái)管理的復(fù)雜性,我們盡量多地寫(xiě)無(wú)狀態(tài)組件侠驯,盡量少地寫(xiě)有狀態(tài)的組件抡秆。這樣會(huì)降低代碼維護(hù)的難度,也會(huì)在一定程度上增強(qiáng)組件的可復(fù)用性吟策。前端應(yīng)用狀態(tài)管理是一個(gè)復(fù)雜的問(wèn)題儒士,我們后續(xù)會(huì)繼續(xù)討論。

React.js 非常鼓勵(lì)無(wú)狀態(tài)組件檩坚,在 0.14 版本引入了函數(shù)式組件——一種定義不能使用 state 組件着撩,例如一個(gè)原來(lái)這樣寫(xiě)的組件:

class HelloWorld extends Component {
  constructor() {
    super()
  }

  sayHi () {
    alert('Hello World')
  }

  render () {
    return (
      <div onClick={this.sayHi.bind(this)}>Hello World</div>
    )
  }
}

用函數(shù)式組件的編寫(xiě)方式就是:

const HelloWorld = (props) => {
  const sayHi = (event) => alert('Hello World')
  return (
    <div onClick={sayHi}>Hello World</div>
  )
}

以前一個(gè)組件是通過(guò)繼承 Component 來(lái)構(gòu)建,一個(gè)子類(lèi)就是一個(gè)組件匾委。而用函數(shù)式的組件編寫(xiě)方式是一個(gè)函數(shù)就是一個(gè)組件拖叙,你可以和以前一樣通過(guò) <HellWorld /> 使用該組件。不同的是赂乐,函數(shù)式組件只能接受 props 而無(wú)法像跟類(lèi)組件一樣可以在 constructor 里面初始化 state薯鳍。你可以理解函數(shù)式組件就是一種只能接受 props 和提供 render 方法的類(lèi)組件。

但本書(shū)全書(shū)不采用這種函數(shù)式的方式來(lái)編寫(xiě)組件挨措,統(tǒng)一通過(guò)繼承 Component 來(lái)構(gòu)建組件挖滤。

下一節(jié)中我們將介紹《React.js 小書(shū) Lesson13 - 渲染列表數(shù)據(jù)》崩溪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市壶辜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担租,老刑警劉巖砸民,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奋救,居然都是意外死亡岭参,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)尝艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)演侯,“玉大人,你說(shuō)我怎么就攤上這事背亥∶爰剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狡汉,是天一觀的道長(zhǎng)娄徊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盾戴,這世上最難降的妖魔是什么寄锐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尖啡,結(jié)果婚禮上橄仆,老公的妹妹穿的比我還像新娘。我一直安慰自己衅斩,他們只是感情好盆顾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著畏梆,像睡著了一般椎扬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具温,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天蚕涤,我揣著相機(jī)與錄音,去河邊找鬼铣猩。 笑死揖铜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的达皿。 我是一名探鬼主播天吓,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贿肩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了龄寞?” 一聲冷哼從身側(cè)響起汰规,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎物邑,沒(méi)想到半個(gè)月后溜哮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡色解,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年茂嗓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科阎。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡述吸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锣笨,到底是詐尸還是另有隱情蝌矛,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響盾舌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衅金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望簿煌。 院中可真熱鬧氮唯,春花似錦、人聲如沸姨伟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夺荒。三九已至瞒渠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間技扼,已是汗流浹背伍玖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剿吻,地道東北人窍箍。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親椰棘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纺棺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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