React組件生命周期及組件之間的通信

来源:http://www.cnblogs.com/shy-huiying/archive/2016/10/19/5976442.html
-Advertisement-
Play Games

[TOC] 名詞解釋 state: 它是組件的屬性,主要用來存儲組件自身需要的數據。 虛擬DOM: 它是ReactJS中提出的一個概念,是將真實的DOM結構映射成一個JSON數據結構。 1.組件生命周期 1.創建階段 :該方法會返回一個對象,並緩存下來。然後與父組件指定的props對象合併,最後賦值 ...


[TOC]

名詞解釋

  • state:它是組件的屬性,主要用來存儲組件自身需要的數據。
  • 虛擬DOM:它是ReactJS中提出的一個概念,是將真實的DOM結構映射成一個JSON數據結構。

1.組件生命周期

1.創建階段

  • getDefaultProps():該方法會返回一個對象,並緩存下來。然後與父組件指定的props對象合併,最後賦值給this.props作為該組件的預設屬性。

2.實例化階段

  • getInitialState():初始化組件state的值,其返回值會賦值給組件的this.state屬性。
  • componentWillMount():業務邏輯的處理都應該放在這裡,如對state的操作等。
  • render():渲染並返回一個虛擬DOM。當返回null或false時,表明不需要渲染任何東西。
  • componentDidMount():在該方法中,ReactJS會使用render方法返回的虛擬DOM對象來創建真是的DOM結構。在這裡可以對根據虛擬DOM結構而生成的真實DOM進行相應的處理 。

3.更新階段

主要發生在用戶操作之後或父組件有更新的時候。

  • componentWillReceiveProps(object nextProps):在該函數中,通常可以調用this.setState方法來完成對state的修改。
  • shouldComponentUpdate(nextProps, nextState):該方法用來攔截新的props或state,然後根據實現設定好的判斷邏輯,作出最後要不要更新組件的決定。return一個boolean值。
  • componentWillUpdate(object nextProps, object nextState):當shouldComponentUpdate()返回true時,可以在該方法中做一些更新之前的操作。
  • render:根據一系列的diff演算法,生成需要更新的虛擬DOM數據。實踐表明,在render中,最後只做數據和模板的組合,不應進行state等邏輯的修改,這樣組件結構更清晰。
  • componentDidUpdate:該方法在組件的更新已經同步到DOM中後出發,我們常在該方法中做一些DOM操作。

4.銷毀階段

  • componentWillUnmount:當組件需要從DOM中移除時,我們通常會做一些取消事件綁定、移除虛擬DOM中對應的組件數據結構、銷毀一些無效的定時器等工作。

2.組件之間的通信

  • 子組件調用父組件的方法:
    只需父組件把要被調用的方法以屬性的方式放在子組件上,子組件內部便可以通過“this.props.被調用的方法”這樣的方式來獲得父組件傳過來的方法。
  • 父組件調用子組件的方法:
    子組件被設置為ref之後,父組件就可以通過this.ref.xxx來獲取到子組件了。其中xxx為子組件ref的值。

3.其它tips

合理使用key屬性:
合理使用key屬性有時能減少需要頁面渲染時更新的DOM節點。
如在沒有key屬性的First和Second組件之間插入一個Third組件,React JS的Diff演算法的結果是,First組件不變,先將Second組件進行刪除,然後在創建並插入Third組件,最後再創建並插入Second組件。
如果給上述三個組件都添加上key屬性,則演算法結果會有所改變:First組件不變,Second組件不變,只是在Second組件之前創建並插入來Third組件。


最近在學習React Native,重溫了一下React組件的生命周期及組件之間的通信。
以上內容來自《React Native入門與實踐》一書的部分讀書筆記,BTW,這是一本不錯的入門書,講得很詳細。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • × 目錄 [1]原理介紹 [2]代碼實現 [3]實例應用 前面的話 在運動系列中,前面分別介紹了勻速運動、變速運動和曲線運動。下麵介紹一種特殊的運動形式——抖動 原理介紹 抖動其實是往複運動的一種特殊形式,只不過往複運動是一種無摩擦力的無限運動,且以速度為參照依據;而抖動以位置作為參照依據,最終停在 ...
  • Waud.js 是一個Web音頻庫,有一個HTML5音頻降級處理方案。 它允許您利用Web音頻API為你的Web應用程式控制音頻功能。在不支持Web音頻API的非現代瀏覽器使用HTML5音頻降級方案。 ...
  • 關於本系列文章 本系列文章總共8個章節,41篇文章,主要翻譯自官方API文檔,加上自己的一些理解撰寫而成。 區別與園子和網路上的其他一些Knockout教程,這個系列教程將由淺入深的系統的介紹Knockout的知識點和使用細節。 並且本系列KnockoutJS教程是基於最新的3.4.0版本入手的。對... ...
  • Knockout旨在允許您將任意JavaScript對象用作視圖模型。 只要一些視圖模型的屬性是observables,您可以使用KO將它們綁定到您的UI,並且UI將在可觀察屬性更改時自動更新。 大多數應用程式需要從後端伺服器獲取數據。 由於伺服器沒有任何可觀察的概念,它只提供一個純JavaScri... ...
  • 調用 localstorge、cookies 等本地存儲方式 方法一:使用localStorage 使用localStorage.setItem(key,value);添加內容 使用storage事件監聽添加、修改、刪除的動作 window.addEventListener("storage",fu ...
  • <script type="text/javascript"> window.onload = function cc() { var tr=document.getElementsByTagName("tr"); for(var i=0;i<tr.length;i++){ tr[i].style. ...
  • 我現在做的一個項目是angular,但是我用直接引用百度地圖的方法引進js,寫html,js代碼,發現,我去,報錯了,我一開始還以為是百度地圖跟angular有衝突,然後我就去搜索啊,發現angular也有一個百度地圖插件,無奈我用了報錯了,網上說要用angular2版本才能相容,但是我又不會下載2 ...
  • 我們中國嘛傳統段落就是要首行縮進兩個字,首先首行縮進的css是text-indent: 然後這個值是多少呢,一般你的字母的font-size是多少,text-indent:2*font-size的值 比如你的字的字體大小是16px,那麼你想讓段落首行縮進兩個字的話就是text-indent:2*16 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...