react新舊生命周期鉤子

以下的內容根據尚硅谷整理。

舊生命鉤子

在這里插入圖片描述
輔助理解:

  • 紅色框:掛載時生命鉤子
  • 藍色框:更新時生命鉤子
  • 綠色框:卸載時生命鉤子

掛載時

如圖所示,我們可以看到,在組件第一次掛載時會經歷:
構造器(constructor)=》組件將要掛載(componentWillMount)=》組件掛載渲染(render)=》組件掛載完成(componentDidMount)。

更新時

有三條路徑可以被觸發,分別是紅色、橙色和粉色。
在這里插入圖片描述
組件內部狀態更新:
路徑2:組件是否應該更新(shouldComponentUpdate)=》組件將要更新(componentWillUpdate)=》組件更新渲染(render)=》組件更新完成(componentDidUpdate)。

  • shouldComponentUpdate,未顯性聲明時默認返回ture,返回false時組件無法進行更新操作。也就無法執行××××××××》組件將要更新(componentWillUpdate)=》組件更新渲染(render)=》組件更新完成。
shouldComponentUpdate(){return false;
}

強制更新:
路徑3:我們可以調用this.forceUpdate()實現強制更新,這個api和setState一樣都是React自帶的,一般這個強制更新很少用。
組件將要更新(componentWillUpdate)=》組件更新渲染(render)=》組件更新完成(componentDidUpdate)。

父組件重新render:
路徑1:在父組件執行完render()之后會被觸發。還記得嗎?我們藍色的區域是更新的生命鉤子,也就是說第一次render()的時候不算,第二次及之后才會被觸發。(componentWillReceiveProps)

import React, { Component } from 'react'export default class A extends Component {state={car:'奧迪'}changeCar= () => {this.setState({car:'奔馳'})}render() {return (<div><div>我是組件A</div><button onClick={this.changeCar}>換車</button><B car={this.state.car}/></div>)}
}class B extends Component {//首次渲染不會被觸發componentWillReceiveProps(){console.log('componentWillReceiveProps')}render() {return (<div>我是組件B,我接收到的車是:{this.props.car}</div>)}
}

舊生命鉤子的總結

在這里插入圖片描述

新生命鉤子

當你充分理解舊的生命鉤子之后,看下面這張圖對你來說應該易如反掌。大體來說用來劃分的區塊方式一致,即:創建時、更新時【三條路徑】、卸載時。
在這里插入圖片描述

getDerivedSateFromProps

直譯:從props哪里獲得的派生的State

1.
state ={name:'佛系努力中……'}
//注意點1:需聲明為類的靜態方法《static》
static getDerivedStateFormProps(props,state){//可以讀取到props,state//注意點2:必須return一個state對象或者nullreturn {name:'哈哈哈'} //或者null
}
最后,this.state.name將會被渲染成‘哈哈哈’,直接更改了state的值,且任何操作不會改變該值。
2.
state ={name:'佛系努力中……'}
static getDerivedStateFormProps(props,state){return null
}
如果return null 功能將不會受到影響
3.此方法使用于state的值在任何時候取決于porps
state ={name:'佛系努力中……'}
static getDerivedStateFormProps((props,state){return props
}

總結:這個生命周期鉤子會被用到情況很少,并且建議盡量避免使用,防止導致代碼冗余,并使組件難以維護。

getSnapshotBeforeUpdate

//在更新之前獲得一個快照
getSnapshotBeforeUpdate(prevProps,prevState){console.log("getSnapshotBeforeUpdate--",prevProps,prevState)return '一只小貓'
}

componentDidUpdate

//組件以及更新完畢,接收三個值,最后一個snapShot,即為getSnapshotBeforeUpdate返回值
componentDidUpdate(prevProps,prevState,snapShot){console.log("componentDidUpdate--",prevProps,prevState,snapShot)}

一個應用場景
總結:這個東西實際應用場景也很少,嘿嘿!
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stateflow——如何查看狀態機中參數變化及狀態機斷點調試

法一&#xff1a;使用Data Inspector 點擊“符號圖窗”和“屬性”&#xff0c;如圖&#xff1b;在選擇變量n并右鍵點擊inspector&#xff0c;最后在logging&#xff0c;如圖 法二&#xff1a;log active state 和法一類似使用data inspector查看&#xff0c;類似的查看方法和…

【每周一測】Java階段四第三周學習

目錄 1、關于分布式鎖的說法&#xff0c;錯誤的是&#xff08; &#xff09; 2、JDK動態代理產生的代理類和委托類的關系是 3、下列關于ElasticSearch中基本概念描述錯誤的是 4、Spring Cloud 中&#xff0c;Feign 是什么&#xff1f; 5、在JavaScript中&#xff0c;可以使…

玩轉大數據13: 數據倫理與合規性探討

1. 引言 隨著科技的飛速發展&#xff0c;數據已經成為了現代社會的寶貴資產。然而&#xff0c;數據的收集、處理和利用也帶來了一系列的倫理和合規性問題。數據倫理和合規性不僅關乎個人隱私和權益的保護&#xff0c;還涉及到企業的商業利益和社會責任。因此&#xff0c;數據…

韻達快遞單號查詢,以表格的形式導出單號的每一條物流信息

批量查詢韻達快遞單號的物流信息&#xff0c;并以表格的形式導出單號的每一條物流信息。 所需工具&#xff1a; 一個【快遞批量查詢高手】軟件 韻達快遞單號若干 操作步驟&#xff1a; 步驟1&#xff1a;運行【快遞批量查詢高手】軟件&#xff0c;第一次使用的伙伴記得先注冊…

SOP(標準作業程序)和WI(操作指導書)的聯系和區別

目錄 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a;2.WI&#xff08;操作指導書&#xff09;&#xff1a;3.SOP和WI的區別&#xff1a; 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a; SOP: 所謂SOP&#xff0c;是 Standard Operation Procedure三個單詞中…

【計算機網絡實驗】實驗三 IP網絡規劃與路由設計(頭歌)

目錄 一、知識點 二、實驗任務 三、頭歌測試 一、知識點 IP子網掩碼的兩種表示方法 32位IP子網掩碼&#xff0c;特點是從高位開始連續都是1&#xff0c;后面是連續的0&#xff0c;它有以下兩種表示方法&#xff1a; 傳統表示法&#xff0c;如&#xff1a;255.255.255.0IP前…

【WebSocket】使用ws搭建一個簡單的在線聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一種先進的技術。它可以在用戶的瀏覽器和服務器之間打開交互式通信會話。使用此 API&#xff0c;你可以向服務器發送消息并接收事件驅動的響應&#xff0c;而無需通過輪詢服務器的方式以獲得響應。 webscokets 包括webscoket…

中科院分區和JCR分區有什么區別

文章目錄 名詞解釋學科劃分不同參考的影響因子不同期刊分區不同期刊分區閾值不同 名詞解釋 中科院分區&#xff1a;又稱“中科院JCR分區”&#xff0c;是中國科學院文獻情報中心世界科學前沿分析中心的科學研究成果&#xff0c;期刊分區表數據每年底&#xff08;每年12月中下旬…

汽車繼電器

汽車繼電器 電子元器件百科 文章目錄 汽車繼電器前言一、汽車繼電器是什么二、汽車繼電器的類別三、汽車繼電器的應用實例四、汽車繼電器的作用原理總結前言 汽車繼電器作為一種電子設備,廣泛應用于汽車電路中的各種控制和保護任務,能夠可靠地控制和傳送電能,確保汽車系統的…

Python爬蟲-實現批量抓取王者榮耀皮膚圖片并保存到本地

前言 本文是該專欄的第12篇,后面會持續分享python爬蟲案例干貨,記得關注。 本文以王者榮耀的英雄皮膚為例,用python實現批量抓取“全部英雄”的皮膚圖片,并將圖片“批量保存”到本地。具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。注意,這里抓取的圖片…

低代碼:美味膳食或垃圾食品

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。你認為低代碼到底是美味的膳食還是垃圾食品呢&#xff0c;…

ubuntu串口永久權限

ubuntu串口永久權限 臨時打開串口權限 sudo chmod 666 /dev/ttyUSB0該方法只能臨時添加訪問權限&#xff0c;一次性的&#xff0c;下次拔插串口線或者開關機還需要再次賦予串口權限。 永久打開串口權限 首先查看用戶組 ls -l /dev/ttyUSB0終端輸出&#xff1a; crw-rw-rw…

從零開始搭建鏈上dex自動化價差套利程序(11)

風險控制 需要將倉位杠桿控制到3倍以內&#xff0c;由于dydx與apex沒有獲取倉位杠桿的接口&#xff0c;但是每次發送交易的數額可以決定&#xff0c;故而可以設置每次發送總倉位1.5倍杠桿的數額&#xff0c;然后設置一個變量保證每個方向上的交易不超過2次&#xff0c;即可保證…

數據結構和算法-單鏈表

數據結構和算法-單鏈表 1. 鏈表介紹 鏈表是有序的列表&#xff0c;但是它在內存中是存儲如下 圖1 單鏈表示意圖 小結: 鏈表是以節點的方式存儲每個節點包含data域&#xff0c;next域&#xff0c;指向下一個節點。如圖&#xff1a;發現鏈表的各個節點不一定是連續存儲。比如地…

滑動窗口練習(三)— 加油站問題

題目 測試鏈接 在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升。 你有一輛油箱容量無限的的汽車&#xff0c;從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發&#xff0c;開始時油箱為空。 給定兩個整數數組…

如何教會小白使用淘寶API接口獲取商品數據

隨著互聯網的普及&#xff0c;越來越多的人開始接觸網絡購物&#xff0c;而淘寶作為中國最大的電商平臺之一&#xff0c;成為了眾多消費者首選的購物平臺。然而&#xff0c;對于一些小白用戶來說&#xff0c;如何通過淘寶API接口獲取商品數據可能是一個難題。本文將詳細介紹如何…

Python學習之——時間和日期

Python學習之——時間模塊 參考time 模塊常見接口 datetime 模塊常見接口 calendar 模塊常見接口 示例 參考 Python datetime模塊詳解、示例 搞定Python時區的N種姿勢 calendar – 日歷相關 time 模塊 在Python中&#xff0c;通常有這幾種方式來表示時間&#xff1a; 1&…

浮點數在計算機中如何存儲

舉例&#xff1a; 結果&#xff1a; 文字描述&#xff1a; 先將浮點數轉化為二進制的表示形式&#xff0c; 接著將其二進制的形式按照科學計數法來表示&#xff0c; 符號位的確定&#xff1a;正數0&#xff0c; 負數1 指數的確定&#xff1a;將其二進制表示成為科學計數法…

Fall in love with English

Fall in love with English 愛上英語 Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. 躲藏在布滿塵土的松軟的窗簾后邊&#xff0c;一個年輕人打包他的外套到行李箱中。 He planned to leave home at dusk though there was th…

超完整的mysql安裝配置方法(包含idea和navicat連接mysql,并實現建表)

mysql安裝配置方法 1、下載mysql2、解壓到指定的安裝目錄3、配置初始化文件my.ini4、配置用戶變量和系統變量5、初始化mysql6、安裝mysql服務并啟動修改密碼7、使用idea連接mysql8、使用Navicat可視化工具連接mysql&#xff0c;并實現新建數據庫&#xff0c;新建表 1、下載mysq…