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 インジェクション攻撃を判断する (例の説明)

推薦する

MySQL でデータをクエリし、条件に基づいて別のテーブルに更新する方法の例

この記事では、MySQL が条件に基づいてデータをクエリし、別のテーブルに更新する方法を例を使用して...

Ubuntu環境でPHPとNginxをコンパイルしてインストールする方法

この記事では、Ubuntu 環境で PHP と Nginx をコンパイルしてインストールする方法につ...

ネイティブ js はフォームの定期的な検証を実装します (検証後にのみ送信)

以下の機能が実装されています。 1. ユーザー名: onfouc は msg ルールを表示します。o...

ページ要素の絶対位置と相対位置に関するある程度の理解

今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

Nginx の負荷分散アルゴリズムとフェイルオーバー分析

概要Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによっ...

jsを呼び出すいくつかの方法が整理され、使用が推奨されています

a タグではクリック イベントがよく使用されます。 1. href="javascript...

UbuntuでOpenCVをコンパイルしてインストールする方法

opencv2 の簡単なインストール: conda インストール --channel https:/...

画像をハイパーリンクとして使用したときに表示される青いボックスを削除する方法

最近、Dreamweaver を使用して製品プレゼンテーションを作成し、画像にハイパーリンクを追加し...

古典的なJavaScriptの再帰ケースの質問の詳細な分析

目次再帰とは何ですか?また、どのように機能しますか? 1. 合計(1)デジタル加算(2)配列の和2....

Vue プロジェクトで mock.js を使用するための完全な手順

Vue プロジェクトで mock.js を使用する開発ツールの選択: Vscode 1. コマンドラ...

正の整数かどうかを判断するMYSQLカスタム関数の例コード

関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...

mysql ローカルログインでポート番号を使用してログインできない問題の解決策

最近、Linux を使用してローカルにログインしていたところ、正常にログインできず、次のエラー メッ...

Docker で最初のアプリケーションをデプロイする方法

前回の記事では、Docker Desktop をインストールし、Kubernetes を有効にしまし...

Linux FTP匿名アップロードとダウンロードが自動的に開始される問題を解決する

勉強や仕事で FTP サーバーを頻繁に使用する場合は、起動時に自動的に起動するように設定できます。設...