摘要:示例此方法有兩個參數返回值為或者默認返回主要使用它來控制組件要不要渲然,常用作性能優化。只能捕獲組件樹的異常,無法捕獲這個方法內的異常。
組件更新
static getDerivedStateFromProps()
當本地state需要根據props來改變的時候可調用此方法。
這個方法是在render()前會被執行,只要執行render()都會被在之前被觸發。
該方法有兩個參數props和state; 返回值為state對象, 不需要返回整體state,把需要改變的state返回即可。
示例:
static getDerivedStateFromProps(props, state) { if(props.color !== state.color) { return {color: props.color}; } }
shouldComponentUpdate()
此方法有兩個參數:shouldComponentUpdate(nextProps, nextState).
返回值為true或者false, 默認返回true.
主要使用它來控制組件要不要渲然,常用作性能優化。
觸發此方法的條件是:組件接收任意props或者state時都會被調用。需要注意的是在第一次render()時和在調用forceUpdate()時都不會被觸發。
示例:
shouldComponentUpdate(nextProps, nextState) { if(nextProps.color !== this.props.color || nextState.size !== this.state.size) { return true; } return false; }
render()
這個方法是React組件中必須要提供的方法。當state或者props任一數據有更新時都會執行。
需要注意當繼承PureComponent時,不會對對象進行深度比較,也就是,不會根據對象內的對象變化時執行render().
render()是一個純函數,也就是不能在這個方法中有類似setState()這樣的行為。
返回的數據類型可以有:
null、String、Number、Array、Boolean。
React elements
Fragment
Portal
注意:不能返回undefined.
當shouldComponentUpdate()返回false時,無論state和props有沒有變化,這個方法都不執行。
示例:
render() { return ({this.state.color}); }
getSnapshotBeforeUpdate()
getSnapshotBeforeUpdate(prevProps, prevState)在render將組件渲然到dom中就會執行。
如果不實現該方法則返回null.
返回的數據由自己定義,并且返回的數據作為componentDidUpdate方法中的參數。
示例:
class ScrollingList extends React.Component { constructor(props) { super(props); this.listRef = React.createRef(); } getSnapshotBeforeUpdate(prevProps, prevState) { if (prevProps.list.length < this.props.list.length) { const list = this.listRef.current; return list.scrollHeight - list.scrollTop; } return null; } render() { return ({/* ...contents... */}); } }
componentDidUpdate()
該方法在組件更新后立即執行,并且在組件掛載階段不執行。
componentDidUpdate(prevProps, prevState, snapshot)第三個參數就是上節中提到的。
示例:
componentDidUpdate(prevProps, prevState, snapshot) { if (snapshot !== null) { const list = this.listRef.current; list.scrollTop = list.scrollHeight - snapshot; } }組件卸載
componentWillUnmount()
在組件被卸載或者銷毀的時候執行,方法中不能再有setState的動作。
一般用作清除組件中起的定義器、webSocket等。
示例:
componentWillUnmount() { if(this.timer) { window.clearInterval(this.timer); this.timer = null; } }
在線示例
組件異常處理
componentDidCatch()
componentDidCatch(error, info) 異常的處理。
只能捕獲組件樹的異常,無法捕獲這個方法內的異常。
示例:
定義一下異常處理組件:
class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } componentDidCatch(error, info) { this.setState({ hasError: true }); window.console.log(error, info); } render() { if (this.state.hasError) { returnSomething went wrong.
; } return this.props.children; } }
使用這個異常組件:
推薦閱讀《React 手稿》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99056.html
摘要:組件加載當組件被實例化并且插入時所執行的方法,也會按照下的順序依次執行。示例方法是在組件加載完后立即執行,也就是當該組件相關的節點插入到樹中時。該方法在組件生命中只執行一次。注意一些監聽需要在組件卸載時清理掉,否則會引起異常。 組件加載 當組件被實例化并且插入Dom時所執行的方法,也會按照下的順序依次執行。 constructor() 構造方法。 這個方法有兩個目的: 初始化一...
摘要:本文主要介紹之后的生命周期。該方法有兩個參數和返回值為對象不需要返回整體,把需要改變的返回即可。必須有一個返回值,返回的數據類型可以有。此生命周期主要用于優化性能。最后,說明一點這三個生命周期在未來版本中會被廢棄。 React16.3.0開始,生命周期進行了一些變化。本文主要介紹React16.3.0之后的生命周期。 React16.3.0之前生命周期: 16版本之前的react組件的...
摘要:的返回值將作為的參數,如果返回,則不更新,不能返回或以外的值,否則會警告。在更新之前調用,此時已更新返回值作為的第個參數一般用于獲取之前的數據語法是從的返回值,默認是的使用場景一般是獲取組建更新之前的滾動條位置。 React16 后的各功能點是多個版本陸陸續續迭代增加的,本篇文章的講解是建立在 16.6.0 版本上本篇文章主旨在介紹 React16 之后版本中新增或修改的地方,所以對于...
摘要:對于最開始關注的是的初始化以及在哪里請求。在進行初始化,推薦在中進行請求。是在組件即將被卸載前一刻的鉤子,一般用于取消中訂閱的事件等作用,清理一些不要的變量等,避免內存泄漏。第二條的原因額,說好的更新才調,初始化不調用是符合邏輯的。 前言 在上篇文章React 導讀(一)中學習到了寫第一個 Web 組件,這篇文章將繼續之前的目錄,開始新的知識點補充: [x] React 如何編寫 H...
摘要:卸載階段組件卸載和銷毀老版生命周期之前的生命周期初始化階段涉及個鉤子函數這些方法會在組件初始化的時候被調用,只跟實例的創建有關。 前言:React 的版本從 v15 到 v16.3 ,再到v16.4,現在最新的版本是 v16.8了。其中最大的變化可能是React Hooks的加入,而最令人困惑的卻是它的生命周期,新舊生命周期函數混雜在一起,難免會讓許多新來者有很多困惑。所以這一篇我們來...
閱讀 3548·2021-08-31 09:39
閱讀 1854·2019-08-30 13:14
閱讀 2919·2019-08-30 13:02
閱讀 2769·2019-08-29 13:22
閱讀 2341·2019-08-26 13:54
閱讀 767·2019-08-26 13:45
閱讀 1586·2019-08-26 11:00
閱讀 982·2019-08-26 10:58