上一章說明了生命週期的概念,本質上就是框架在操作元件的過程中暴露出來的一系列鉤子,我們可以選擇我們需要的鉤子,完成我們自己的業務,以下講的是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)
:
該方法主要用來初始化constructor()state
,或者初始化一些資源,可以訪問prop
,但是訪問不了this.state
directly or define a
}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
元件返回true
,b
元件返回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 管理所有資源 ...