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 Swarm を使用して分散クローラー クラスターを構築する例

クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...

MySQL における int の最大値の詳細な説明

導入2日前に見た問題について詳細に書きます。バイトコンピューターがバイナリに基づいていることは誰もが...

MycliはMySQLコマンドライン愛好家にとって必須のツールです

マイクリMyCLI は、自動補完と構文の強調表示を備えた MySQL、MariaDB、および Per...

MySQL マスタースレーブレプリケーションのいくつかのレプリケーション方法の概要

非同期レプリケーションMySQL レプリケーションは、デフォルトでは非同期です。マスター スレーブ ...

いくつかの一般的な CSS レイアウト (要約)

まとめこの記事では、次の一般的なレイアウトを紹介します。 3 列レイアウトを実装する方法は多数ありま...

MySQL で CURRENT_TIMESTAMP を使用する方法

目次CURRENT_TIMESTAMPの使用CURRENT_TIMESTAMPを使用したタイムスタン...

MySQLステートメントを監視する方法の詳細な説明

クイックリーディングSQL ステートメントを監視する必要があるのはなぜか、監視方法と監視手段について...

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析まず、ステートメントが実行される順序を見てみましょう。 (8)選択する...

Nodeはバックエンドの実装手順を素早く構築します

1. まず、node、express、express-generator をインストールします (4...

MySQLクエリ構文の概要

序文:この記事では主に、MySQL の where、group by、order by、limit、...

VMware 仮想マシンのインストール Linux システムのグラフィック チュートリアル

この記事では、LinuxシステムのVMwareインストールの具体的な手順を参考までに紹介します。具体...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

CSS3 で翻訳効果 (transfrom: translate) を実装する例

移動を実現するためにtranslateパラメータを使用しますtranslateX: X 軸に沿って移...

Webデザインチュートリアル(2):模倣と盗作について

<br />前回の記事では、Webデザインの手順と方法を紹介しました。詳細については、前...

フロントエンドにアニメーション遷移効果を実装する方法

目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...