react新舊生命周期的區別:1、新生命周期中去掉了三個will鉤子,分別為componentWillMount、componentWillReceiveProps、componentWillUpdate;2、新生命周期中新增了兩個鉤子,分別為getDerivedStateFromProps(從props中得到衍生的state)和getSnapshotBeforeUpdate。
本教程操作環境:Windows7系統、react18版、Dell G3電腦。
react在版本16.3前后存在兩套生命周期,16.3之前為舊版,之后則是新版,雖有新舊之分,但主體上大同小異。
React生命周期(舊)
值得強調的是:componentWillReceiveProps函數在props第一次傳進來時不會調用,只有第二次后(包括第二次)傳入props時,才會調用
shouldComponentUpdate像一個閥門,需要一個返回值(true or false)來確定本次更新的狀態是不是需要重新render
React生命周期(新)
react新舊生命周期的區別
新的生命周期去掉了三個will鉤子,分別是:componentWillMount、componentWillReceiveProps、componentWillUpdate
新的生命周期新增了兩個鉤子,分別是:
1、getDerivedStateFromProps:從props中得到衍生的state
接受兩個參數:props,state
返回一個狀態對象或者null,用來修改state的值。
使用場景:若state的值在任何時候都取決于props,那么可以使用getDerivedStateFromProps
2、getSnapshotBeforeUpdate:在更新前拿到快照(可以拿到更新前的數據)
在更新DOM之前調用
返回一個對象或者null,返回值傳遞給componentDidUpdate
componentDidUpdate():更新DOM之后調用
接受三個參數:preProps,preState,snapshotValue
使用案例:
固定高度的p,定時新增一行,實現在新增的時候,使目前觀看的行高度不變。
<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>4_getSnapShotBeforeUpdate的使用場景</title><style>.list{width:200px;height:150px;background-color:skyblue;overflow:auto;}.news{height:30px;}</style></head><body><!--準備好一個“容器”--><pid="test"></p><!--引入react核心庫--><scripttype="text/javascript"src="../js/17.0.1/react.development.js"></script><!--引入react-dom,用于支持react操作DOM--><scripttype="text/javascript"src="../js/17.0.1/react-dom.development.js"></script><!--引入babel,用于將jsx轉為js--><scripttype="text/javascript"src="../js/17.0.1/babel.min.js"></script><scripttype="text/babel">classNewsListextendsReact.Component{state={newsArr:[]}componentDidMount(){setInterval(()=>{//獲取原狀態const{newsArr}=this.state//模擬一條新聞constnews='新聞'+(newsArr.length+1)//更新狀態this.setState({newsArr:[news,...newsArr]})},1000);}getSnapshotBeforeUpdate(){returnthis.refs.list.scrollHeight}componentDidUpdate(preProps,preState,height){this.refs.list.scrollTop+=this.refs.list.scrollHeight-height}render(){return(<pclassName="list"ref="list">{this.state.newsArr.map((n,index)=>{return<pkey={index}className="news">{n}</p>})}</p>)}}ReactDOM.render(<NewsList/>,document.getElementById('test'))</script></body></html>
說明:
在React v16.3中,迎來了新的生命周期改動。舊的生命周期也在使用,不過在控制臺上可以看到棄用警告了。并且提示有三個生命周期鉤子將會被棄用,盡量不要使用。再或者可以在其前邊加前綴 UNSAFE_
。
讀到這里,這篇“react新舊生命周期的區別有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
深圳買新房契稅交多少?深圳的新房契稅在繳納時會根據房屋的面積來確定最終的稅率,若是住房的面積在90平米以下,那需要繳納總房款1%的契稅。若是住房的面積在90平米到144平米之間,那需要繳納房屋總房款1.5%的契稅。如果住房的面積已經超過了144平米了,那么需要繳納總房款3%的契稅。深圳買房契稅征收標準2023年1、對個人購買家庭唯一住房,面積為90平方米及以下的,減按1%的稅率征收契稅;面積為90...
螞蟻金服是干什么的?1、螞蟻金服是一家正規成立的企業集團,成立時間是2014年10月,全稱是螞蟻金融服務集團,后來改名叫“螞蟻集團”,是大家熟知的支付寶的母公司,其發展主要也就是起步于支付寶這個第三方移動支付平臺。2、螞蟻金服主要是做金融服務業的,以領先的金融科技,為消費者和小微企業提供數字化的生活服務。螞蟻金服和阿里巴巴什么關系?螞蟻金服與阿里巴巴集團是淵源頗深的關聯公司...
【資料圖】目前中國三峽武漢科創園、中鐵建長江投資(600119)有限公司、中國電建(601669)集團華中區域總部/中國電建集團華中投資有限公司、中國電建裝備集團有限公司、中國能源建設集團華中區域總部/中能建華中投資公司、中能建綠色建材有限公司、中國南水北調集團江漢水網建設開發有限公司7家央企區域總部和重要子公司在武漢落戶并揭牌。相關閱讀:2022年上半年,武漢市地區生產總值(GDP)8904.1...