JS變數儲存與深拷貝和淺拷貝
v16之前生命週期:
(1)initialization元件初始化階段
constructor(){ super(props); this.state={} }
super(props) 呼叫基類的構造方法,也將父元件的props注入給子元件,供子元件讀取props,只讀;state初始化 ,可修改
(2)Mounting元件掛載階段
componentWillMount:在元件掛載到DOM前呼叫,且只會呼叫一次
render:根據props和state,return一個React元素
componentDidMount:元件掛載到DOM後呼叫,且只會呼叫一次
componentWillMount =》render =》 componentDidMount
(3)update元件更新階段
componentWillReceiveProps(nextProps) :只調用於props引起的元件更新過程中,引數nextProps是父元件傳給當前元件的新的props;
shouldComponentUpdate(nextProps,nextState):此方法通過比較nextProps、nextState及當前元件的this.props、this.state,返回true時當前元件將繼續執行更新過程,返回false則當前元件更新停止,以此可減少元件的不必要渲染,優化元件效能;
componentWillUpdate(nextProps,nextState):該方法在呼叫render方法前執行,可執行一些元件更新發生前的工作
componentDidUpdate(prevProps,prevState):在元件更新後呼叫,可以操作元件更新的DOM,元件更新前的引數
a. 父元件重新render的情況,導致props重傳引起的子元件渲染
componentWillReceiveProps(nextProps) =》shouldComponentUpdate(nextProps,nextState) =》 componentWillUpdate(nextProps,nextState) =》 render =》 componentDidUpdate(prevProps,prevState)
b. 元件自身呼叫setState
shouldComponentUpdate =》 componentWillUpdate =》 componentDidUpdate
(4)unmounting元件解除安裝階段
componentWillUnmount
v16.4生命週期:
getDerivedStateFromProps(props,state) :在元件建立時和更新時的render方法之前呼叫,它應該返回一個物件來更新狀態,或者返回null不更新任何內容
getSnapshotBeforeUpdate():被調用於render之後,可以讀取但無法使用DOM的時候。使得元件在可能更改之前從DOM捕獲一些資訊,如滾動位置。此生命週期返回的任何值都將作為引數傳遞給componentDidUpdate()
(1)建立時
constructor =》getDerivedStateFromProps(props,state) =》 render =》 componentDidMount
(2)更新時
getDerivedStateFromProps =》 shouldComponentUpdate =》 render =》 getSnapshotBeforeUpdate =》 componentDidUpdate
(3)解除安裝時
componentWillUnmount