摘要:一起因記得在年月,曾經在自己的博客中寫過一篇,有興趣的朋友可以回顧下如今到現在的版本已經發生了太多的變化,所以又再一次重新認識一下生命周期借用官網的一張圖從上圖中可以大概的看出整個生命周期的組成和構成以及運行的順序,掌握這些對于代碼的書寫
一、起因
記得在2017年4月,曾經在自己的博客中寫過一篇react-lifeCycle,有興趣的朋友可以回顧下!如今到現在react的版本已經發生了太多的變化,所以又再一次重新認識一下生命周期
借用官網的一張圖
從上圖中可以大概的看出整個生命周期的組成和構成以及運行的順序,掌握這些對于react代碼的書寫有很重要的作用,比如何時更新,何時銷毀,何時注意性能等等一系列的問題,下面要說的就是舉例說明了;
現在書寫組建基本上都是使用ES6的方法或者是stateless的方法,這里用ES6方法來講:
1、static defaultProps = {} - 初始化props的地方
2、static propTypes = {} - 檢測或要求props類型的地方
有的將此屬性書寫在組建外部,以前這個檢測的方法是在react點下,如今已經將這一部分移除來成為了一個多帶帶的插件prop-types
3、構造方法
constructor(props){ super(props) this.state = {} } 構造方法本身其實就是構造函數的本身,在ES5中是沒有繼承的寫法的,因此通過prototype來達到目的,例如 //構造函數People function People (name,age){ this.name = name; this.age = age } People.prototype.sayName = function(){ return "我的名字是:"+this.name; } let p1 = new People("harrisking",23); console.log(p1.sayName()) //我的名字是:harrisking 在ES6中可以這樣來實現 class People{ //構造方法constructor就等于上面的構造函數People constructor(name,age){ this.name = name; this.age = age; } sayName(){ return "我的名字是:"+this.name; } } //創建新的子類p1 let p1 = new People("harrisking",23); console.log(p1.sayName()) 上面兩種是一樣的 而super()是用來繼承父類的this的對象,如果不寫就會得不到this,那么在構造函數中書寫this.state就會報錯。 有些人會在構造函數中書寫綁定事件到this上,如下 this.handle = this.handle.bind(this),這在方法中是沒有寫箭頭函數或者避免在d標簽中綁定this() 如果要在其中使用this.props就必須要在構造函數中加參數props 當然你也可以不寫這個構造函數,在render中是有this的,這個是react自帶的
4、componentWillMount
5、render
6、componentDidMount
至此初始化時應該用到的周期就是這些;
二、周期舉例
運行時周期的順序以例子來講明:
父組建IndexPage 子組建Son
直接來看瀏覽器的運行結果
初始化階段的順序為will --- render ---- Mount遇到子組建先執行子在執行父
當我們點擊Welcome to Here的時候周期順序如圖
在父組建中調用setState后就會走render周期,子組建就會接收新的props進入componentWillReceiveProps周期,然后決定是否進行更新子組建周期shouldComponentUpdate,返回true則更新,返回false不跟新,這里一般用于優化作用,當返回true時進入即將更新階段componentWillUpdate階段然后render,最后進入更新后階段componentDidUpdate
(
shouldComponentUpdate周期用于優化react項目的性能,可以選擇更新或不更新,官網也推出了react的另外一個屬性PureComponent, 即class Son extent React.PureComponent,用這個屬性來代替手寫shouldComponentUpdate, 但是它只是對屬性進行淺比較,如果屬性的層級太深就只能進行手動了
)
當我們點擊Son組建中的button的時候,看看內部周期是怎樣的順序
周期仍然于更新一樣,這里不在贅述了
三、卸載周期 componentWillUnmount
常在此周期中進行定時器的銷毀,或者引用外部對象的銷毀(destroy);
每次熟悉一遍就有一遍的收獲!學以致用,知情分享!樂在其中!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101665.html
摘要:閱讀深入淺出和本書值得記錄的地方源碼第二章設計高質量的組件檢查雖然能夠在開發階段發現代碼中的問題,但是放在產品環境中就不大合適現有的就具有這個功能,可以通過安裝,但是應該確保只在發布產品代碼時使用它。 閱讀深入淺出react和redux本書值得記錄的地方 github源碼:https://github.com/mocheng/react-and-redux 第二章 設計高質量的 Rea...
摘要:因為是深入系列文章,本文不會仔細介紹每個生命周期方法的使用,而是會重點講解在使用組件生命周期時,經常遇到的疑問和錯誤使用方式。父組件發生更新導致的組件更新,生命周期方法的調用情況同上所述。 文:徐超,《React進階之路》作者授權發布,轉載請注明作者及出處 React 深入系列4:組件的生命周期 React 深入系列,深入講解了React中的重點概念、特性和模式等,旨在幫助大家加深...
摘要:因為是深入系列文章,本文不會仔細介紹每個生命周期方法的使用,而是會重點講解在使用組件生命周期時,經常遇到的疑問和錯誤使用方式。父組件發生更新導致的組件更新,生命周期方法的調用情況同上所述。 React 深入系列,深入講解了React中的重點概念、特性和模式等,旨在幫助大家加深對React的理解,以及在項目中更加靈活地使用React。 組件是構建React應用的基本單位,組件需要具備數據...
摘要:所以對于組件更新階段的組件生命周期,我們簡單提及并且提供一些資料給大家。這里為了知識的完整,補充關于更新階段的組件生命周期你可以通過這個方法控制組件是否重新渲染。大家對這更新階段的生命周期比較感興趣的話可以查看官網文檔。 React.js 小書 Lesson20 - 更新階段的組件生命周期 本文作者:胡子大哈本文原文:http://huziketang.com/books/react...
摘要:但是它與里大部分的概率是保持一致的。但是如何將轉換成函數的調用呢就是干這件事情的。好了,讓我們看看是如何工作的。下面的圖片在流程圖中高亮了一個組件是如何工作的最后希望這篇文章能幫助你理解是如何工作的至少在中 英文原文鏈接 Virtual DOM很神奇,同時也比較復雜,難以理解。react,preact和相似的js庫都使用了virtual dom。然而,我找不到任何好的文章或者文檔,可以...
閱讀 2355·2021-11-16 11:52
閱讀 2332·2021-11-11 16:55
閱讀 758·2021-09-02 15:41
閱讀 2989·2019-08-30 15:54
閱讀 3148·2019-08-30 15:54
閱讀 2257·2019-08-29 15:39
閱讀 1515·2019-08-29 15:18
閱讀 977·2019-08-29 13:00