React入門0x008 生命週期

2021-09-13 09:30:33 字數 4513 閱讀 8640

上一章說明了生命週期的概念,本質上就是框架在操作元件的過程中暴露出來的一系列鉤子,我們可以選擇我們需要的鉤子,完成我們自己的業務,以下講的是react v16.3以下的生命週期,v16.3以及以上的版本有所不同

以下是元件掛載的過程中觸發的宣告週期:

以下是元件更新的時候觸發的生命週期:

constructor()

settimeout(() => )

}, 3000)

}componentwillreceiveprops()

shouldcomponentupdate()

render()

}componentwillupdate()

componentdidupdate() }

第一次的render是由元件掛載引起的,而其他的方法則是由setstate引起的

以下是由元件解除安裝的時候觸發的生命週期:

掛載:

constructor

componentwillmount

render

componentdidmount

更新:componentwillreceiveprops

shouldcomponentupdate

componentwillupdate

render

componentdidupdate

解除安裝:componentwillunmount

錯誤處理(這裡不說):

componentdidcatch

constructor(props)

該方法主要用來初始化state,或者初始化一些資源,可以訪問prop,但是訪問不了this.statedirectly or define a
constructor()

}render() }

componentwillmount()

沒啥卵用,可以在這個方法中呼叫setstate(),並且設定的state可以在本次渲染生效,推薦使用constructor
render()

***,每次更新狀態都會觸發,但是不要在這裡呼叫會觸發元件更新的函式,比如setstate(),否則可能陷入無盡阿鼻地獄。
componentdidmount()

這個方法常用,觸發這個生命週期,意味著dom和子元件都掛載好了,refs也可以用了,一般在這兒做網路請求。
componentwillreceiveprops(nextprops)

這個元件也常用,一般用於父元件狀態更新,導致傳遞給子元件的props更新,當時子元件又不是直接繫結父元件的props的時候使用,比如
class content extends react.component 

}render()

} constructor()

settimeout(() => )

}, 1000)

}render()

}

我們接受父元件的state.content作為子元件的初始化state.content,但是1s 之後,父元件發生了變化,state.content從1變成了10,我們期望子元件也同時更新,可惜子元件的constructor只會執行一次,為了解決這個問題,我們可以新增這個生命週期:

class content extends react.component 

}componentwillreceiveprops(nextprops) )

}render()

}

這樣就可已在父元件props更新的時候,觸發子元件的更新

shouldcomponentupdate(nextprops, nextstate)

這個元件也很常用,用來判斷是否要進行某次更新,如果返回true則執行更新,如果返回false則不更新,常用與效能優化
class a extends react.component 

}class b extends react.component

} constructor(props)

settimeout(() => )})}

render()

}}reactdom.render(

)class a extends react.component

render()

}class b extends react.component

render()

}

我在促發這個方法的時候,a元件返回trueb元件返回false,檢視瀏覽器,可以發現,觸發該方法的時候a渲染了,而b沒有渲染

沒啥卵用,和componentdidupdate組成一對兒,如果業務需要,就用
componentdidupdate()

沒啥卵用,和componentwillupdate組成一對兒,如果業務需要,就用
componentwillunmount

用於清理資源或者事件
class content extends react.component 

如果我們返回顯示隱藏元件,就會積累越來越多的定時器。然後就**了。

```class content extends react.component

this.interval=setinterval(() => )

console.log(this.state.num)

}, 1000)

}render()

componentwillunmount()

}```

這麼解決

在不同的生命週期做不同的事。

推薦系統實踐 0x00 序

最後還是找到了自己算是滿意的工作,也準備開始新的研究領域,推薦演算法。由於我之前的研究內容主要是圍繞著cv展開,所以還是需要提前學習一下推薦演算法的知識。目前選擇了 推薦系統實踐 這本書,看中了它能夠將知識點和 相結合的優勢,並不枯燥也有一部分專案實踐等等。這篇文章就算作自己開始讀這本 推薦系統實踐...

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

0x00 什麼是作業系統

作業系統網課筆記 使用者視角 pc使用者 追求方便,易用 高效能 主機使用者 關注資源利用率 手持裝置使用者 關心方便 電池續航時間 正是由於不同使用者,不同的應用場景對作業系統有不同分要求,就需要設計不同的作業系統,以適合使用者和應用的需求。這也是作業系統多樣化的原因。系統視角 1 管理所有資源 ...