react 16ライフサイクル実行順序テスト
2513 ワード
プロジェクトのアドレス:https://github.com/wangxiaofeid/react-lifecycle
マウント constructor componentWillMount render componentDidMount
更新 componentWillReceiveProps shouldComponentUpdate componentWillUpdate render componentDidUpdate
アンインストール componentWillUnmount
マウント constructor getDerivedStateFromProps render componentDidMount
更新 getDerivedStateFromProps shouldComponentUpdate render getSnapshotBeforeUpdate componentDidUpdate
アンインストール componentWillUnmount
マウントフェーズは、renderが実行されたときにのみ親コンポーネントのconstructorが実行を開始し、サブコンポーネントマウント完了(componentDidMount)、親コンポーネントがマウント完了 を計算する更新フェーズは、マウントフェーズと同様に親コンポーネントのみがrenderに実行され、サブコンポーネントのgetDerivedStateFromProps->shouldComponentUpdate->renderが開始されますが、親コンポーネントのgetSnapshotBeforeUpdateは、サブコンポーネントのgetSnapshotBeforeUpdateに続いて、サブコンポーネントはcomponentDidUpdate にあります.
コンポーネントがforceUpdateメソッドを呼び出すとshouldComponentUpdateは実行されず、getDerivedStateFromPropsが実行され、その後renderが実行され、その後のライフサイクルと更新が一致します.
テスト
最初のレンダー(First Render)
father constructor
father getDerivedStateFromProps
father render
children constructor
children getDerivedStateFromProps
children render
children componentDidMount
father componentDidMount
親コンポーネントデータ修正トリガ再レンダリング
father getDerivedStateFromProps
father shouldComponentUpdate
father render
children getDerivedStateFromProps
children shouldComponentUpdate
children render
children getSnapshotBeforeUpdate
father getSnapshotBeforeUpdate
children componentDidUpdate, snapshot: 1
father componentDidUpdate, snapshot: 1
親コンポーネント呼び出しforceUpdate
father getDerivedStateFromProps
father render
children getDerivedStateFromProps
children shouldComponentUpdate
children render
children getSnapshotBeforeUpdate
father getSnapshotBeforeUpdate
children componentDidUpdate, snapshot: 1
father componentDidUpdate, snapshot: 1
破棄
father componentWillUnmount
children componentWillUnmount
まとめ
旧ライフサイクルの各フェーズでの呼び出し状況
新しいライフサイクルの各フェーズでの呼び出し状況
親子コンポーネント間のライフサイクル関数の呼び出し順序
親コンポーネント呼び出しforceUpdate
コンポーネントがforceUpdateメソッドを呼び出すとshouldComponentUpdateは実行されず、getDerivedStateFromPropsが実行され、その後renderが実行され、その後のライフサイクルと更新が一致します.