Reactの新バージョンのライフサイクルフック機能と使用方法の詳細な説明

Reactの新バージョンのライフサイクルフック機能と使用方法の詳細な説明

旧ライフサイクルと比較して

ここに画像の説明を挿入

3つのフックが廃止され、2つの新しいフックが追加されました

React16以降、3つのライフサイクルが非推奨になりました(ただし削除はされません)

  • componentWillMount (コンポーネントがマウントされるフック)
  • componentWillReceiveProps (コンポーネントが新しいパラメータを受け取ろうとするときのフック)
  • componentWillUpdate (コンポーネントが更新される際のフック)

新しいバージョンのライフサイクルに新しいフックが追加されました

  • プロパティから派生した状態を取得する
  • パラメータを通じて新しいプロパティと状態を取得できる
  • この関数は静的です
  • この関数の戻り値はコンポーネントの状態を上書きします

更新前にスナップショットを取得する

  1. 実際の DOM 構築は完了していますが、まだページに実際にレンダリングされていません。
  2. この関数では、通常、いくつかの追加のDOM操作を実装するために使用されます。
  3. この関数の戻り値はcomponentDidUpdateの3番目のパラメータとして使用されます。

プロパティから派生した状態を取得する

getDerivedStateFromProps はインスタンス用ではないため、静的メソッドとして定義する必要があります。戻り値を与える必要がある


戻り値は状態Objまたはnullになります
戻り値が state Obj の場合、以前の値は上書きされ、変更できません。null を返しても、他の関数には影響しません。

//propsから派生した状態を取得する static getDerivedStateFromProps(props,state){
	リターンプロップ
}

状態の値が常にpropsに依存する場合は、getDerivedStateFromPropsを使用できます。

ここに画像の説明を挿入

<div id="test"></div>
  <!-- react core ライブラリをインポート -->
  <script src="../js/17.0.1/react.development.js"></script>
  <!-- react-dom を導入して、DOM を操作するための react をサポートする -->
  <script src="../js/17.0.1/react-dom.development.js"></script>
  <!-- jsx を js に変換するには babel を導入します -->
  <script src="../js/17.0.1/babel.min.js"></script>

  <スクリプトタイプ='text/babel'>
    // コンポーネントクラスを作成する Count extends React.Component{
    // コンストラクタ コンストラクタ(props){
      console.log('Count --- コンストラクター')
      スーパー(小道具)
      // 状態を初期化します this.state = {count:0}
    }

    //フックcomponentDidMount(){
      console.log('Count --- componentDidMount')
    }

    // コンポーネントのアンインストールボタンのコールバック death=()=>{
      ReactDOM.unmountComponentAtNode(document.getElementById('test'))
    }

    // +1 を実装する
     追加 =()=>{
      // 元の状態を取得する const {count} = this.state
      // ステータスを更新 this.setState({count:count+1})
    }

    // 強制更新ボタンのコールバック force=()=>{
      this.forceUpdate()
    }

    静的 getDerivedStateFromProps(props,state){
      console.log('getDerivedStateFromProps', プロパティ, 状態)
      リターンプロップ
    }

    // コンポーネント更新バルブを制御する shouldComponentUpdate(){
      console.log('Count --- shouldComponentUpdate')
      // 戻り値が false の場合、バルブはデフォルトで閉じられます。
      真を返す
    }

    //コンポーネント更新完了フックcomponentDidUpdate(){
      console.log('Count --- コンポーネントの更新回数')
    }

     // コンポーネントはアンインストールされます hook componentWillUnmount(){
      console.log('Count --- componentWillUnmount');
    }

    与える(){
      console.log('カウント --- レンダリング')
      const {count} = this.state
      戻る(
        <div>
          <h2>現在の合計: {count}</h2>
          <button onClick={this.add}>クリックして +1</button>  
          <button onClick={this.death}>クリックしてコンポーネントをアンインストールします</button>  
          <button onClick={this.force}>強制的に更新するにはここをクリックします(データは変更されません)</button>  
        </div>
      )
    }
  }
  
  // コンポーネントのレンダリング ReactDOM.render(<Count count={166}/>,document.getElementById('test'))
  </スクリプト>

実行結果

ここに画像の説明を挿入

更新前にスナップショットを取得する

戻り値は null またはスナップショットになります。null の場合、効果はありません。スナップショットの場合、戻り値は componentDidUpdate の 3 番目のパラメータに渡すことができます。
componentDidUpdate が受け取ることができる 3 つのパラメーターは、以前のプロパティ、以前の状態、および getSnapshotBeforeUpdate によって返されるスナップショットです。
prevprops、prevstate、snapshotValue

ここに画像の説明を挿入

<div id="test"></div>
  <!-- react core ライブラリをインポート -->
  <script src="../js/17.0.1/react.development.js"></script>
  <!-- react-dom を導入して、DOM を操作するための react をサポートする -->
  <script src="../js/17.0.1/react-dom.development.js"></script>
  <!-- jsx を js に変換するには babel を導入します -->
  <script src="../js/17.0.1/babel.min.js"></script>

  <スクリプトタイプ='text/babel'>
    // コンポーネントクラスを作成する Count extends React.Component{
    // コンストラクタ コンストラクタ(props){
      console.log('Count --- コンストラクター')
      スーパー(小道具)
      // 状態を初期化します this.state = {count:0}
    }

    //フックcomponentDidMount(){
      console.log('Count --- componentDidMount')
    }

    // コンポーネントのアンインストールボタンのコールバック death=()=>{
      ReactDOM.unmountComponentAtNode(document.getElementById('test'))
    }

    // +1 を実装する
     追加 =()=>{
      // 元の状態を取得する const {count} = this.state
      // ステータスを更新 this.setState({count:count+1})
    }

    // 強制更新ボタンのコールバック force=()=>{
      this.forceUpdate()
    }

    静的 getDerivedStateFromProps(props,state){
      console.log('getDerivedStateFromProps', プロパティ, 状態)
      nullを返す
    }

    更新前にスナップショットを取得する(){
      console.log('getSnapshotBeforeUpdate');
      「eee」を返す
    }

    // コンポーネント更新バルブを制御する shouldComponentUpdate(){
      console.log('Count --- shouldComponentUpdate')
      // 戻り値が false の場合、バルブはデフォルトで閉じられます。
      真を返す
    }

    //コンポーネント更新完了フックcomponentDidUpdate(preProps,preState,snapshotValue){
      console.log('Count---1componentDidUpdate',preProps,preState,snapshotValue);
    }

     // コンポーネントはアンインストールされます hook componentWillUnmount(){
      console.log('Count --- componentWillUnmount');
    }

    与える(){
      console.log('カウント --- レンダリング')
      const {count} = this.state
      戻る(
        <div>
          <h2>現在の合計: {count}</h2>
          <button onClick={this.add}>クリックして +1</button>  
          <button onClick={this.death}>クリックしてコンポーネントをアンインストールします</button>  
          <button onClick={this.force}>強制的に更新するにはここをクリックします(データは変更されません)</button>  
        </div>
      )
    }
  }
  
  // コンポーネントのレンダリング ReactDOM.render(<Count count={166}/>,document.getElementById('test'))
  </スクリプト>

要約する

ライフサイクルの 3 つのフェーズ (新規)

1. 初期化フェーズ: ReactDOM.render() によってトリガーされる - 初期レンダリング

コンストラクター()getDerivedStateFromPropsrender()componentDidMount()

2. 更新フェーズ: コンポーネント内の this.setSate() または親コンポーネントの再レンダリングによってトリガーされます。

getDerivedStateFromPropsshouldComponentUpdate()render()getSnapshotBeforUpdatecomponentDidUpdate()

3. コンポーネントのアンマウント: ReactDOM.unmountComponentAtNode() によってトリガーされます

コンポーネントのマウントを解除します()

重要なフック

render: レンダリングを初期化するか、レンダリング呼び出しを更新する。componentDidMount: 監視を開始し、Ajax リクエストを送信する。componentWillUnmount: タイマーのクリーンアップなどの仕上げ作業を行う。

捨てられるフック

  1. コンポーネントマウント
  2. コンポーネントがプロパティを受け取る
  3. コンポーネントの更新

現在使用すると警告が表示されます。次のメジャー バージョンでは UNSAFE_ プレフィックスの使用が必須になります。将来的には完全に廃止される可能性があり、推奨されません。

これで、新しいバージョンの React ライフサイクル フック機能に関するこの記事は終了です。React ライフサイクル フック機能に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Reactコンポーネントのライフサイクル機能についての簡単な説明
  • React Stateの状態とライフサイクルの実装方法
  • Reactコンポーネントのライフサイクルの例
  • Reactライフサイクル例の分析
  • React ライフサイクルの原則と使用上の注意
  • Vue ライフサイクルと React ライフサイクルの比較 [推奨]
  • React Nativeのコンポーネントのライフサイクルについての簡単な説明
  • Reactコンポーネントのライフサイクルの詳細な説明
  • 一般的な js-react コンポーネントのライフサイクル
  • 面接官はReactのライフサイクルについてよく質問します

<<:  Tomcat で静的リソースを処理するチュートリアル

>>:  Keras を使って SQL インジェクション攻撃を判断する (例の説明)

推薦する

Docker実行コンテナが作成状態にある問題についての簡単な説明

最近の問題としては、次のような現象があります。システムには、docker run コマンドを継続的に...

Reactイベントバインディングの詳細な説明

1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...

MySQL データをエクスポートおよびインポートするための HeidiSQL ツール

場合によっては、SQL へのデータのエクスポートとインポートを容易にするために、特定のツールを使用し...

Apache Log4j2 が核レベルの脆弱性と迅速な修正を報告

Apache Log4j2 が核レベルの脆弱性を報告し、スタックリーダーの友人たちは大騒ぎになりまし...

MySQL 外部キー設定方法の例

1. 外部キーの設定方法1. MySQL では、2 つのテーブルを関連付けるために、外部キー (FO...

C++ TpeScriptシリーズのジェネリックについて

目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...

Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

結論:マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) ...

nginx ログを elasticsearch にインポートする方法の例

nginx ログは filebeat によって収集され、logstash に渡され、logstash...

Mysql 更新マルチテーブル共同更新方法の概要

次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...

Linux で gdb を使用してコア ファイルをデバッグする方法

1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...

MySQL トランザクション分析

取引トランザクションはビジネス ロジックの基本単位です。各トランザクションは一連の SQL ステート...

Docker で MySQL をインストールし、リモート接続を実装するチュートリアル

画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...

ウェブサイトのフロントエンドパフォーマンスの最適化: JavaScript と CSS

Yahoo チームが書いた、ウェブサイトのパフォーマンス最適化に関する記事を読みました。この記事は...

Vue でよく使われる命令 v-if と v-show の違いを簡単に分析します。

目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...

テーブルレイアウトの長所と短所、そして推奨されない理由

テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...