Route三參比較

這次主要講的是react-router-dom的Route三個參數(shù)(component、render、children)的比較

上地址:地址1、地址2

先從需求說起:需要把最外層的方法(或者參數(shù))帶入到路由控制的組件中去。

component

原項目中直接import一個組件,放入這個參數(shù)中

//index.js

import A from './xx';

<Route component = { A }/>

這樣想傳入變量或者方法就沒有辦法實現(xiàn),然后找到了地址1中提到的component,上面寫到可以傳入一個inline function,剛好同時看到了地址2的內(nèi)容,正好驗證了上面說的,修改后代碼

const data = {key : 'value'};

<Route component = { props => {

? ? ? ?const obj = Object.assign({},{data : data},props);? ?//第二個obj是我希望傳入進去的參數(shù)

????? ? return? <A {...obj}/>

}}

接著就在組件A中的this.props看到了data參數(shù),也得到了我們想要的結(jié)果。打印this.props


component

但是就有點郁悶,這個方法的 props 變量是從哪里來的,為什么可以傳入方法呢?接著我在定義obj上面添加了一個debugger,運行到斷點,在調(diào)用棧中發(fā)現(xiàn)了下面的代碼

姑且可以看出傳入了Route給的props(history、match等)和上下文。然后就沒有繼續(xù)往上追溯...

問題又來了:

如果這個時候index.js文件有一個state,當state改變(通過this.setState方法)使得index重新render,這個時候你就會發(fā)現(xiàn),每次render對于組件A來說都是一次全新的渲染和調(diào)用(可以在A的contructor方法中打上log),這個又是為什么呢?讓我們一起看看地址1里面的一段話


尖頭指(的不太清楚)的地方有提到:如果為組件提供一個內(nèi)聯(lián)函數(shù),那么每個渲染都會創(chuàng)建一個新的組件。這導致現(xiàn)有組件卸載和新組件安裝而不僅僅是更新現(xiàn)有組件。當使用內(nèi)聯(lián)函數(shù)用于內(nèi)聯(lián)渲染時,使用 render 或 children

所以我初略的總結(jié):如果上面不是我們希望的,那么有兩種方式解決:

1.使用上面提到的 render 或者 children

2.把state控制的部分單獨擰出來獨立成一個組件,避免index組件的再次render,當然這個肯定是不好的,那么我們就看看上面提到的 render 和 children 吧

render

修改上面component的例子

<Route render = { props =>{

? ? return <A data={data} {...props}/ >

}}

在所謂的A組件中打印this.props和component是一樣的。

同時改變index中的state也不會使得重新create一個嶄新的A組件。pe 非

children

看描述感覺最大的作用是:允許您根據(jù)路由是否匹配來動態(tài)調(diào)整UI。

暫時沒有這方面的需求...

我是小陸,我愛這個世界
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 3. JSX JSX是對JavaScript語言的一個擴展語法, 用于生產(chǎn)React“元素”,建議在描述UI的時候...
    pixels閱讀 2,982評論 0 24
  • 做React需要會什么? react的功能其實很單一,主要負責渲染的功能,現(xiàn)有的框架,比如angular是一個大而...
    李先生Mr_Li閱讀 3,020評論 1 20
  • 做React需要會什么? react的功能其實很單一,主要負責渲染的功能,現(xiàn)有的框架,比如angular是一個大而...
    蒼都閱讀 14,967評論 1 139
  • 技術棧: react + redux + webpack + react-router + ES6/7/8 + i...
    黃昏少年閱讀 3,133評論 0 19
  • 哪位大神可以告訴我目錄怎么粘貼?為什么我粘貼過來的只是目錄,點不開內(nèi)容呢。
    張漫一閱讀 171評論 0 0

友情鏈接更多精彩內(nèi)容