成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React 的生命周期函數有哪些?

開發 前端
React 中類組件的生命周期函數,分為掛載、更新、卸載三種。

大家好,我是前端西瓜哥。今天來過一下 React 類函數的生命周期。

類組件的生命周期

React 中類組件的生命周期函數,分為掛載、更新、卸載三種:

  1. UNSAFE_componentWillMount:組件即將掛載(廢棄)。
  2. componentDidMount:組件掛載。
  3. UNSAFE_componentWillReceiveProps:父組件更新時,拿到最新 props(廢棄)。
  4. shouldComponentUpdate:是否允許組件更新。
  5. UNSAFE_componentWillUpdate:組件即將更新(廢棄)。
  6. componentDidUpdate:組件更新。
  7. componentWillUnmount:組件即將卸載銷毀。

相關的攔截器:

  1. static getDerivedStateFromProps:拿到新的 props,然后對象返回值會合并到 state。

更新狀態的方法:

  • setState(updater[, callback]):更新狀態,并重渲染組件。需要注意的是,即使新的狀態和舊的狀態一樣,組件還是會進行重渲染;
  • forceUpdate:強制更新,會跳過 shouldComponentUpdate 的判斷邏輯。該方法常用于在 state 和 props 之外的數據源更新后的 UI 重渲染。

圖示

舊版生命周期:

圖片

新版生命周期:

圖片

componentDidMount

該生命周期函數會在組件掛載的時候觸發。所謂掛載,指的是真實 DOM 元素添加到文檔樹上。

使用場景是做一些初始化操作:

  1. 訂閱事件。
  2. 請求數據。

componentDidMount() {
this.timerId = setInterval(() {
// 輪訓訂單是否完成等業務邏輯
}, 800);
}

componentDidUpdate

組件更新的時候調用 componentDidUpdate。組件掛載的時候不會觸發。

該函數接收三個參數:

  1. preProps:組件更新前的 props。
  2. preState:組件更新前的 state。
  3. snapshot:配合 getSnapshotBeforeUpdate 使用,這個方法會在每次組件更新時,將返回值保存下來作為此次的快照。參數 snapshot 拿到的就是這個快照。

使用場景是放置狀態改變時需要執行的邏輯:

  1. 用戶點擊 tab,切換了 id,在這個生命周期下檢查 currentId 是否改變,如果改變,請求對應的數據。

其實我們在業務中最常使用的生命周期函數,因為前端絕大多數的場景是交互導致狀態改變,并執行一些行為。

例子:

componentDidUpdate(preProps, preState) {
if (this.state.id !== preState.id) {
fetchData(this.state.id).then(res {
// 拿到數據后更新 state
})
}
}

componentWillUnmount

組件在卸載前會調用 componentWillUnmount。

通常都是做一些解除綁定的收尾工作,防止錯誤和內存泄漏:

  1. 取消訂閱事件。
  2. 關閉定時器。
  3. 取消請求,如果當前有請求還在進行的話。
  4. 執行一些業務邏輯,比如關閉彈窗的時候保存正在編輯的數據。

例子;

componentWillUnmount() {
clearInterval(this.timerId)
}

static getDerivedStateFromProps

從 props 得到派生的 state。getDerivedStateFromProps 在掛載和更新的階段都會被執行,并在 render 前觸發。

它是類組件的靜態屬性,接收 props 和 state,然后它的返回值是個對象,會合并覆蓋到 state 上。

例子:

static getDerivedStateFromProps(props, state) {
// 半受控的 input 組件,如果外部傳入 props.value 就用外部的
// 否則用組件自己內部的 state.value
if (props.value) {
return {
value: props.value
}
}
}

該方法不推薦使用,很多場景其實并沒有必要用到這個方法,因為它會引起 state 的突變,可讀性并不好。因為如果你沒看到這個方法,你可能會很奇怪 state 的改變怎么沒有符合預期。能不用就不用。

shouldComponentUpdate

接收新的 props 和 state,由開發者自行決定是否進行重渲染。

會拿到新的 props 和 state,返回 true 表示要進行更新和重渲染,返回 false 則中斷更新。準確來說,任何返回值都可以,它們會直接作為 if 語句的判斷表達式進行判斷。

如果返回了 false,狀態會保持之前的樣子。

強制更新(this.forceUpdate)不會走這個函數,因為你都說了要 “強制更新” 了。

shouldComponentUpdate(nextProps, nextState) {
// setState 方法即使更新的是個相同的值,組件還是會重渲染
// 一種防止重渲染的方法是在這里判斷新舊兩個狀態是否相同
if(nextState.id === this.state.id){
return false
}
return true
}

被廢棄的生命周期函數

一些生命周期函數因為容易產生 bug,以及在 react 底層重構后可能會在一次更新中多次被觸發,現已廢棄,并加上 ??UNSAFE_?? 前綴。

  1. UNSAFE_componentWillMount:組件即將掛載。
  2. UNSAFE_componentWillReceiveProps:當父組件更新時,該函數會被調用,并拿到最新的 props。此時 props 還未變更。第一次初始化時該函數不會被觸發。該方法。
  3. UNSAFE_componentWillUpdate:組件即將更新。

結尾

以上就是 React 的一些生命周期函數。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2021-10-20 07:18:51

微信小程序函數

2013-08-01 09:40:51

Windows 8.1

2024-10-12 10:39:36

函數緩存activated

2015-07-08 16:28:23

weak生命周期

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2009-06-18 13:32:39

Java線程生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid

2012-06-20 10:29:16

敏捷開發

2009-06-24 10:47:55

JSF生命周期

2013-08-19 17:03:00

.Net生命周期對象

2021-07-19 05:52:29

網絡生命周期網絡框架

2019-10-16 10:50:13

Linux內核測試

2013-07-29 05:11:38

iOS開發iOS開發學習類的'生命周期'

2012-01-16 09:00:56

線程

2009-06-17 15:06:50

Hibernate實體

2010-07-14 10:59:15

Perl線程

2015-07-09 15:42:48

ios應用生命周期
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本三级做a全过程在线观看 | 日韩一级精品视频在线观看 | 日韩在线播放一区 | 日日干夜夜干 | 妞干网福利视频 | 成人福利网站 | 在线成人一区 | 国产精品久久久久久久久 | 视频一区二区在线观看 | 91精品一区| 伊人中文字幕 | 日本不卡一区二区三区 | 男女羞羞视频在线 | 精品99久久 | 亚洲精品乱码久久久久久9色 | 亚洲综合在线播放 | 日批的视频 | 国产精品美女久久久久aⅴ国产馆 | 亚洲成人在线视频播放 | 日韩视频成人 | 天天射影院 | av免费网站在线观看 | 中文字幕免费在线 | 一级毛片在线播放 | 午夜精品久久久久久久久久久久 | 免费一区二区三区 | 成人黄色电影免费 | 国产成人精品在线播放 | 黄网免费| 免费观看日韩精品 | 91精品久久久久久久久99蜜臂 | 欧美高清dvd | 四虎影音 | 中文字幕视频三区 | 日韩在线精品视频 | 国产精品久久久久久久久久久久久 | 国产成人精品一区二区三区四区 | 超级乱淫av片免费播放 | 国产成人精品a视频 | 久久三区 | 免费看黄视频网站 |