react-組件生命周期

来源:http://www.cnblogs.com/submerge/archive/2016/04/02/5347534.html
-Advertisement-
Play Games

本文同步至微信公眾號http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=402267570&idx=1&sn=4b0dc27842c32d902bad2dc4eea75f9a#rd 感興趣的可以掃碼關註哈 生命周期(Life Cycle)這個詞, ...


本文同步至微信公眾號http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=402267570&idx=1&sn=4b0dc27842c32d902bad2dc4eea75f9a#rd

感興趣的可以掃碼關註哈

生命周期(Life Cycle)這個詞,通常指一個對象的生老病死。苦逼的碼代碼的應該都不會陌生吧。在面向對象的編程里的“對象”也是有生命周期這個概念的。比如對象的創建實例化,運行,銷毀等。react的組件也是有生命周期的。

    react給每個組件提供了生命周期鉤子函數去響應不同的時刻---創建時,存在起及銷毀其。這些生命周期的鉤子方法我覺得還是挺有用的,能在鉤子方法里做的事情還是挺多呢。

    實例化

    當首次使用一個組件類時,這些方法會一次被調用:

    getDefaultProps

    getInitialState

    componentWillMount

    render

    componentDidMount

    這裡需要留意getDefaultProps方法。改方法是用來給組件設置預設屬性用的。也只有一個組件首次實例化的時候才會被調用。

    getInitialState,對於組件的每個實例來說,這個方法的調用次數也只有一次。這個方法是用於初始化每個實例的狀態(state)。與getDefaultProps不用的是每次實例化時,改方法都會被創建。因為每個組件實例都應該有自己的狀態(關於狀態機,自行搜過哈)。在這個方法里,就可以訪問this.props了。

    componentWillMount,望文生義一下都知道了,這個方法是在render函數調用前被調用的。額,望文生義?這個也是自己一直說的語義化給代碼的可維護性帶來的好處。不管是html元素,還是css class屬性名,變數名,方法名等等都應該帶有語義才好些。。。

    render.render函數被調用之後,會創建一個虛擬的DOM,用來表示組件的輸出。對於一個組件來說,render是唯一一個必須的方法,並且有特定的規則:

    只能通過this.props和this.state訪問數據

    可以返回null,false或者任何react組件

    只能出現一個頂級組件(不能返回一組元素)

    必須純凈(不能改變組件的狀態或者修改dom的輸出)

    componentDidMount,在render方法成功調用並且真實的DOM已經渲染之後,可以在componentDidMount函數內部通過this.getDOMNode()方法訪問它。可以在這個方法中操作真實的dom元素。

    沒有實踐就沒有發言權,本著實事求是的原則,自己碼段代碼來驗證一下哈。

 如上圖代碼,我定義了一個DIvider組件。並依次初始化了改組件的props,state等。然後調用ReacDOM.render方法渲染改組件。運行結果如下圖所示:

可以看到,控制臺中的內容,是按照預期的順序輸出出來的。

    控制台還輸出了段警告,Divider.getDOMNode方法已經過時了。讓用ReactDOM.findDOMNode方法代替。查看了下官方文檔,有將方面的componentDidMount方法修改為如下版本。

 

componentDidMount: function () {

          console.log(ReactDOM.findDOMNode(this));

        }

然後再運行,就不會出現警告了。
getDefaultProps方法只會運行一次,當我們再一次渲染改組件的時候getDefaultProps方法就不會被調用了。

    存在期

    此時,組件已經渲染好並且用戶可以與它進行交互。通常是通過一次滑鼠點擊,手指點擊或鍵盤事件來出發一個事件處理器。隨著用戶改版了組件或整個應用的state,便會有新的state流入組件樹,並且我們將會獲得操作它的機會。

    銷毀&清理期

    每當react使用完一個組件,這個組件就必須從DOM中卸載隨後被銷毀。此時,僅有的一個鉤子函數被調用。完成清理和銷毀工作。

    毛主席曾教導我們說,好好學習,天天向上。毛主席也曾教導我們,學習的目的全在與應用。瞭解了react組件的生命周期及其相關的鉤子方法之後,小沫也是hold不住的摩拳擦掌的練習下,碼段demo什麼的。下麵仿照官網的demo做一個簡單的計數器。代碼及註釋如下:

 

最後總結一下,首先描述了react組件的三個生命周期及其鉤子方法。然後寫了段代碼驗證生命周期的鉤子函數的調用順序,最後運用相關的知識點練習了一個很小很小的demo哈。


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

-Advertisement-
Play Games
更多相關文章
  • Element類型用於表現XML或HTML元素,提供對元素標簽名,子節點及特性的訪問。原型鏈的繼承關係為 某節點元素.__proto__->(HTML某元素Element.prototype)->HTMLElement.prototype->Element.prototype->Node.proto ...
  • html文本垂直居中對齊,代碼如下: <div id="box" style="height:100px; line-height:100px; border:1px solid #cccccc;margin:50px;"> <span style="vertical-align:middle;di ...
  • 本文章向碼農們介紹motion-path在css動畫中的使用實例分析,需要的碼農可以參考一下。 使用motion path,作者可以讓圖像物體按照指定的路徑運動。谷歌瀏覽器積極的要實現這個CSS特征,我想主要motion-path是SVG動畫里獨特的亮點,而谷歌瀏覽器已經決定放棄SVG SMIL,所 ...
  • 前端工作一年了,期間由於工作需要,也做了一些產品的設計,因為自己的目標就是做編程,所以婉拒了與產品相關的一些任務,打算主要把精力放到編程這方面. PS:2015年1月進軍編程行業。 廢話不多講,這一年頁面改版了N次,以至於設計師都撂挑子了,,,頁面做多了,經驗自然就有了。 背景(前端小白,迫於生計放 ...
  • 現如今做電商網站必不可少的一個效果就是限時搶購,這也是各大電商網站的一種促銷手段。下麵的圖片就是聚划算上面的限時搶的效果 一、實現限時搶的效果需要用到的知識 :Javascript Date()對象 Date()返回當前的日期和事件 getYear()返回年份 獲得年最好用 getFullYear( ...
  • 第一章、瞭解web及網路基礎 1.2 http的誕生 HTTP於1990年問世,那時候HTTP並沒有作為正式的標準被建立,被稱為HTTP/0.9 HTTP正式作為標準被公佈是在1996年5月,版本被命名為HTTP/1.0,該協議至今仍被廣泛用在伺服器端。 HTTP/1.1於1997年1月公佈,是目前 ...
  • 開始這個實例之前,我們簡單談一下Node.js吧,Node.js是一個由JavaScript書寫而成的強大Web開發框架,它讓開發強壯的、伸縮性良好的伺服器端Web應用變得更加簡單、容易。這種技術誕生於09年末,在一個JavaScript大會上宣佈,當時這項在伺服器端運行JavaScript技術讓所 ...
  • 前幾天寫的那個拖拽,自己留下的疑問。。。這次在熱心博友的提示下又修正了一些小小的bug,也加了拖拽的邊緣檢測部分。。。就再聊聊拖拽吧 一、不要直接操作dom元素 react中使用了虛擬dom的概念,目地就是要儘量避免直接操作dom元素,所以我們在對dom元素進行操作的時候需要註意,我之前為了獲取fo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...