最外層組件被包裝一個(gè)redux container會(huì)怎樣铐伴?

情景描述

  • 一直對(duì)redux很多地方有疑惑,打算今天一并試一試
  • 我嘗試給最外層組件包裝了一個(gè)container隅要。
  • 我的猜想是:
    • 最外層組件的rerender === 頁(yè)面刷新
    • 任何一個(gè)被container包含的組件都可拿到store中的所有數(shù)據(jù)。而mapStateToProps的作用只是說翼闽,控制哪些變量的變化導(dǎo)致頁(yè)面的rerender拾徙。

困惑點(diǎn)

  • 最外層組件到底能不能被包c(diǎn)ontainer,把他當(dāng)做一般組件一樣使用redux會(huì)不會(huì)發(fā)生什么異常感局?

最外層組件的屬性值是通過什么方式拿到的尼啡?

  • 錯(cuò)誤假設(shè):最外層組件的父組件就是<Provider>是不是可以直接傳遞store中的數(shù)據(jù)呢?
  • 正確解釋
    • 任何一個(gè)組件(包含最外層組件)只有包裝了container才能夠拿到store中的數(shù)據(jù)询微。
    • 請(qǐng)注意:connect的第一個(gè)參數(shù)mapStateToProps函數(shù):返回值一定要是一個(gè)對(duì)象崖瞭,因?yàn)閠his.props是一個(gè)對(duì)象,如果想要通過this.props拿到數(shù)據(jù)撑毛,必須給每一個(gè)value一個(gè)key书聚。
    • 這時(shí)候組件內(nèi)部能夠訪問的數(shù)據(jù)就是mapStateToProps函數(shù)返回的對(duì)象中的屬性。

那么為什么項(xiàng)目要求mapStateToProps函數(shù)只返回當(dāng)前組件需要的數(shù)據(jù)呢藻雌?

  • 因?yàn)閙apStateToProps不僅可以將數(shù)據(jù)傳入組件
  • 而且監(jiān)聽store中這些數(shù)據(jù)的變化雌续,一旦數(shù)據(jù)變化就調(diào)用組件的render函數(shù)。
  • 因此如果我們將store中的所有數(shù)據(jù)傳入組件胯杭,就會(huì)導(dǎo)致驯杜,與組件不相關(guān)的屬性變化也會(huì)導(dǎo)致當(dāng)前組件的rerender。
    ---> 結(jié)論: 被container包裹的組件是否rerender取決于mapStateToProps返回的屬性值有沒有變化做个。而不是根據(jù)當(dāng)前組件的render函數(shù)是否調(diào)用這個(gè)變量來決定的

而為了減少不必要的render需要根據(jù)以上特性決定mapStateToprops的返回值鸽心。

父類進(jìn)行rerender那么子類的render函數(shù)會(huì)被調(diào)用嗎?

  • 錯(cuò)誤的認(rèn)為:以前認(rèn)為只有父類的傳給子類的props屬性值有變化居暖,才會(huì)導(dǎo)致子類重新render顽频。
  • 現(xiàn)在發(fā)現(xiàn):
    • 只要父類重新render那么一定導(dǎo)致子類的重新render。
    • 為了提高效率太闺,我們可以通過設(shè)置下面函數(shù)返回值的true or false確定組件是否需要重新render
    shouldComponentUpdate(nextProps){
          return false;
    }
    

書上說react非常不推崇的反模式在constructor中zuo如下函數(shù)糯景,應(yīng)該將他改寫成在render中獲取,為什么?

constructor(){
   this.state={
    name: this.prop.name
    }//父類傳入的屬性值
} 

render () {
    const name = this.state.name
   //永遠(yuǎn)不變
}

----------------改寫成
render(){
    const name = this.props.name;
}
}
  • 我想現(xiàn)在可以解釋原因:
    • 由于父類的屬性name變化父類組件render
    • 父類組件render跟束,導(dǎo)致子類組件render
    • 這時(shí)候自然的就傳入了最新的name進(jìn)入子類
  • 如果采用反模式
    • 由于父類的屬性name變化父類組件render
    • 父類組件render莺奸,導(dǎo)致子類組件render
    • 但是不會(huì)導(dǎo)致子類的constructor重新執(zhí)行一遍,因此不論this.props.name如何改變冀宴。子類render中獲取的name都不會(huì)變化灭贷。

反思

  • 太粗心,驗(yàn)證的時(shí)候總是認(rèn)為是什么樣的就認(rèn)定是這樣略贮,只要有某一次的結(jié)果偶然出現(xiàn)某個(gè)期望的結(jié)果就認(rèn)為結(jié)論正確甚疟,沒有進(jìn)行單一改變和重新梳理思路的過程仗岖。還是做事過于心急。

action

  • 每個(gè)驗(yàn)證完的結(jié)論 必須復(fù)盤览妖。從頭到尾梳理一遍你的驗(yàn)證過程轧拄,檢查有沒有錯(cuò)誤》砀啵或者使用不當(dāng)?shù)牡胤健?/li>

-------> 研究有些跑題但也算是驗(yàn)證了使用react-redux很多的疑惑有機(jī)會(huì)繼續(xù)驗(yàn)證

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末檩电,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子府树,更是在濱河造成了極大的恐慌俐末,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄侠,死亡現(xiàn)場(chǎng)離奇詭異卓箫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)垄潮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門烹卒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弯洗,你說我怎么就攤上這事旅急。” “怎么了牡整?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵坠非,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我果正,道長(zhǎng),這世上最難降的妖魔是什么盟迟? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任秋泳,我火速辦了婚禮,結(jié)果婚禮上攒菠,老公的妹妹穿的比我還像新娘迫皱。我一直安慰自己,他們只是感情好辖众,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布卓起。 她就那樣靜靜地躺著,像睡著了一般凹炸。 火紅的嫁衣襯著肌膚如雪戏阅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天啤它,我揣著相機(jī)與錄音奕筐,去河邊找鬼舱痘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛离赫,可吹牛的內(nèi)容都是我干的芭逝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼渊胸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旬盯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起翎猛,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胖翰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后办成,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泡态,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年迂卢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了某弦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡而克,死狀恐怖靶壮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情员萍,我是刑警寧澤腾降,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站碎绎,受9級(jí)特大地震影響螃壤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筋帖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一奸晴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧日麸,春花似錦寄啼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嗡综,卻和暖如春乙帮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛤高。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工蚣旱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碑幅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓塞绿,卻偏偏與公主長(zhǎng)得像沟涨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子异吻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • JSX 知識(shí)準(zhǔn)備 JSX 并不是一門全新的語(yǔ)言裹赴,僅僅是一個(gè)語(yǔ)法糖,允許開發(fā)者在javascript中編寫XML語(yǔ)言...
    艾倫先生閱讀 4,494評(píng)論 4 20
  • 做React需要會(huì)什么? react的功能其實(shí)很單一雷猪,主要負(fù)責(zé)渲染的功能睛竣,現(xiàn)有的框架,比如angular是一個(gè)大而...
    蒼都閱讀 14,740評(píng)論 1 139
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南求摇,這只是我在學(xué)習(xí)過程中的一些閱讀筆記射沟,個(gè)人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,810評(píng)論 1 18
  • 前言 本文 有配套視頻与境,可以酌情觀看验夯。 文中內(nèi)容因各人理解不同,可能會(huì)有所偏差摔刁,歡迎朋友們聯(lián)系我討論挥转。 文中所有內(nèi)...
    珍此良辰閱讀 11,894評(píng)論 23 111
  • 1绑谣、 我七哥最近遇到了點(diǎn)煩惱。他跟我說這個(gè)煩惱的時(shí)候拗引,我正在跑步機(jī)上跑步域仇,他唰唰唰的給我發(fā)來了幾張圖片。害我一時(shí)分...
    蕭洛zzy閱讀 1,303評(píng)論 6 16