ReactNative的函數(shù)組件與類組件、Component 與 PureComponent 總結(jié)

一萤衰、組件
1.函數(shù)組件
如果你想寫的組件只包含一個 render 方法,并且不包含 state猜旬,那么使用函數(shù)組件就會更簡單脆栋。我們不需要定義一個繼承于 React.Component 的類,我們可以定義一個函數(shù)洒擦,這個函數(shù)接收 props 作為參數(shù)椿争,然后返回需要渲染的元素。它也稱為無狀態(tài)組價熟嫩。

function Square(props) {
  return (
    <Button className="square" onClick={props.onClick}>
    {props.value}
    </Button>
  );
}

2.類組件
定義類組件秦踪,需要實例化,一般都繼承React.Component 的類掸茅,具有組件的生命周期方法椅邓,屬性 props 是外界傳遞過來的,狀態(tài) state 是組件本身的昧狮,狀態(tài)可以在組件中任意修改景馁,組件的屬性和狀態(tài)改變都會更新視圖。

class SimpleComponent extends React.Component {
    constructor(props) {
        super(props);
        // 設(shè)置 initial state
        this.state = {
         };
    }
    componentDidMount() {

    }
    render() {
        return (
            <View>
            </View>
     )
  }
}

3.類組件與函數(shù)組件的區(qū)別

區(qū)別 函數(shù)組件 類組件
是否有 this 沒有
是否有生命周期 沒有
是否有狀態(tài) state 沒有

二逗鸣、 React.Component
先上代碼:

class CounterButton extends React.Component {

  shouldComponentUpdate(nextProps, nextState) {
    if (this.props.color !== nextProps.color) {
      return true;
    }
    if (this.state.count !== nextState.count) {
      return true;
    }
    return false;
  }
}

shouldComponentUpdate 僅檢查了 props.color 或 state.count 是否改變合住。如果這些值沒有改變,那么這個組件不會更新

三慕购、 PureComponent
如果你的組件更復(fù)雜一些聊疲,你可以使用類似“淺比較”的模式來檢查 props 和 state 中所有的字段,以此來決定是否組件需要更新沪悲。React 已經(jīng)提供了一位好幫手來幫你實現(xiàn)這種常見的模式 - 你只要繼承 React.PureComponent 就行了获洲。

class CounterButton extends React.PureComponent {}

大部分情況下,你可以使用 React.PureComponent 來代替手寫 shouldComponentUpdate殿如。但它只進行淺比較 (例如:1 == 1或者ture==true贡珊,數(shù)組和對象引用是否相同),所以當(dāng) props 或者 state 某種程度是可變的話涉馁,淺比較會有遺漏门岔,那你就不能使用它了。
不要在props和state中改變對象和數(shù)組烤送,如果你在你的父組件中改變對象寒随,你的PureComponent將不會更新。雖然值已經(jīng)被改變,但是子組件比較的是之前props的引用是否相同妻往,所以不會檢測到不同互艾。
因此,你可以通過使用es6的assign方法或者數(shù)組的擴展運算符或者使用第三方庫讯泣,強制返回一個新的對象纫普。
當(dāng)數(shù)據(jù)結(jié)構(gòu)很復(fù)雜時,情況會變得麻煩好渠,存在性能問題昨稼。
(比較原始值和對象引用是低耗時操作。如果你有一列子對象并且其中一個子對象更新拳锚,對它們的props和state進行檢查要比重新渲染每一個子節(jié)點要快的多假栓。)
四、 何時使用Component 或 PureComponent ?
<1> 當(dāng)組件是獨立的晌畅,組件在頁面中的個數(shù)為1或2的但指,組件有很多props寡痰、state抗楔,并且當(dāng)中還有些是數(shù)組和對象的,組件需要每次都渲染的拦坠,使用Component
<2> 當(dāng)組件經(jīng)常作為子組件连躏,作為列表,組件在頁面中數(shù)量眾多贞滨,組件props, state屬性少入热,并且屬性中基本沒有數(shù)組和對象,組件不需要每次都渲染晓铆,只有變化了才渲染勺良,使用PureComponent

粗略總結(jié),覺得有用或喜歡的就點個贊唄~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骄噪,一起剝皮案震驚了整個濱河市尚困,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌链蕊,老刑警劉巖事甜,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滔韵,居然都是意外死亡逻谦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門陪蜻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邦马,“玉大人,你說我怎么就攤上這事∽探” “怎么了忱嘹?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耕渴。 經(jīng)常有香客問我拘悦,道長,這世上最難降的妖魔是什么橱脸? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任础米,我火速辦了婚禮,結(jié)果婚禮上添诉,老公的妹妹穿的比我還像新娘屁桑。我一直安慰自己,他們只是感情好栏赴,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布蘑斧。 她就那樣靜靜地躺著,像睡著了一般须眷。 火紅的嫁衣襯著肌膚如雪竖瘾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天花颗,我揣著相機與錄音捕传,去河邊找鬼。 笑死扩劝,一個胖子當(dāng)著我的面吹牛庸论,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棒呛,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼聂示,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了簇秒?” 一聲冷哼從身側(cè)響起鱼喉,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宰睡,沒想到半個月后蒲凶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡拆内,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年旋圆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麸恍。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡灵巧,死狀恐怖搀矫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刻肄,我是刑警寧澤瓤球,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站敏弃,受9級特大地震影響卦羡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜麦到,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一绿饵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓶颠,春花似錦拟赊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桃移,卻和暖如春屋匕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谴轮。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工炒瘟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吹埠,地道東北人第步。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像缘琅,于是被迫代替她去往敵國和親粘都。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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