太長時間沒寫react了,有點生。重新撿起來練練手。
import react, from 'react';
class demo extends component
}componentwillmount ()
componentdidmount ()
componentwillreceiveprops (nextprops)
shouldcomponentupdate (nextprops,nextstate)
componentwillupdate (nextprops,nextstate)
componentdidupdate (prevprops,prevstate)
render ()
componentwillunmount ()
}export default demo;
react生命週期主要包括三個階段:初始化階段、執行中階段和銷毀階段,在react不同的生命週期裡,會依次觸發不同的鉤子函式
建構函式內部(注意是內部哦,在元件其他地方是可以直接接收的)使用props或context,則需要傳入,並傳入super物件。
constructor(props,context)
也可以單獨傳乙個,都不需要就不用傳。
關於es6的class constructor和super
只要元件存在constructor,就必需要寫super,否則this指向會錯誤
constructor()
元件即將被渲染到頁面之前觸發,此時可以進行開啟定時器、向伺服器傳送請求等操作
但是這裡有乙個問題
ajax請求能寫在willmount裡嗎?
:答案是不推薦,別這麼寫
1.雖然有些情況下並不會出錯,但是如果ajax請求過來的資料是空,那麼會影響頁面的渲染,可能看到的就是空白。
2.不利於服務端渲染,在同構的情況下,生命週期會到componentwillmount,這樣使用ajax就會出錯
元件渲染
元件第一次渲染完成,此時dom節點已經生成,可以在這裡呼叫ajax請求,返回資料setstate後元件會重新渲染
元件接收到屬性時觸發
在接受父元件改變後的props需要重新渲染元件時用到的比較多
當元件接收到新屬性,或者元件的狀態發生改變時觸發。元件首次渲染時並不會觸發
shouldcomponentupdate(newprops, newstate)
//該鉤子函式可以接收到兩個引數,新的屬性和狀態,返回true/false來控制項是否需要更新。
一般我們通過該函式來優化效能:
乙個react專案需要更新乙個小組件時,很可能需要父元件更新自己的狀態。而乙個父元件的重新更新會造成它旗下所有的子元件重新執行render()方法,形成新的虛擬dom,再用diff演算法對新舊虛擬dom進行結構和屬性的比較,決定元件是否需要重新渲染
無疑這樣的操作會造成很多的效能浪費,所以我們開發者可以根據專案的業務邏輯,在shouldcomponentupdate()
中加入條件判斷,從而優化效能
例如react中的就提供了乙個purecomponent
的類,當我們的元件繼承於它時,元件更新時就會預設先比較新舊屬性和狀態,從而決定元件是否更新。值得注意的是,purecomponent
進行的是淺比較,所以元件狀態或屬性改變時,都需要返回乙個新的物件或陣列
元件即將被更新時觸發
shouldcomponentupdate返回true以後,元件進入重新渲染的流程,進入componentwillupdate,這裡同樣可以拿到nextprops和nextstate
元件被更新完成後觸發。
react只有在第一次初始化成功才會進入componentdidmount,之後每次重新渲染後都會進入componentdidupdate這個生命週期,這裡可以拿到prevprops和prevstate,即更新前的props和state。
元件被銷毀時觸發。這裡我們可以進行一些清理操作,例如清理定時器,取消redux的訂閱事件等等。
React中LifeCycle生命週期詳解
如圖,可以把元件生命週期大致分為三個階段 第一階段 是元件第一次繪製階段,如圖中的上面虛線框內,在這裡完成了元件的載入和初始化 第二階段 是元件在執行和互動階段,如圖中左下角虛線框,這個階段元件可以處理使用者互動,或者接收事件更新介面 第三階段 是元件解除安裝消亡的階段,如圖中右下角的虛線框中,這裡...
React中的生命週期
主要指的是繼承react.component建立出來的元件的生命週期 參考vue的生命週期做的筆記,react和vue的生命週期都差不多,有錯的可以告訴我,我再改 created 元件被建立了 mounted 元件被掛載到dom中了 updated 元件被掛載到瀏覽器上了 unmounted 元件被...
react的生命週期
首次例項化 例項化完成後的更新 元件已存在時的狀態改變 生命週期共提供了10個不同的api。1.getdefaultprops 作用於元件類,只呼叫一次,返回物件用於設定預設的props,對於引用值,會在例項中共享。2.getinitialstate 作用於元件的例項,在例項建立時呼叫一次,用於初始...