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

推薦する

Linux でリモートから MySQL を自動的にバックアップする方法

序文:基本的に、自社で使用する場合でも、顧客向けにサーバーを展開する場合でも、MySQL のバックア...

Vue.jsはアイコンをクリックしてズームインし、

前回の記事では、Vue で画像の切り抜きや拡大・縮小、回転を実現する方法を紹介しました。今回は、アイ...

マインスイーパゲームを実装するための jQuery プラグイン (3)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...

MySQL データベース接続例外の概要 (収集する価値あり)

Centos にプロジェクトをデプロイするときに奇妙な問題が見つかりました。データベース接続で例外...

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...

Linux でプロセスを隠す方法と、遭遇する落とし穴

序文1. この記事で使用したツールは、https://github.com/gianlucabore...

onfocus="this.blur()" は視覚障害のあるウェブマスターに嫌われている

スクリーン リーダー ソフトウェアの操作ページについて話しているとき、彼はフロントエンドの学生たちに...

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

Vueのインストール方法の紹介

目次1. グローバルに登録されたコンポーネント2. グローバルカスタム指示vue 、新しいプラグイン...

WeChat アプレットの日付と時刻のコンポーネント (年、月、日、時間、分)

この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...

HTML ページジャンプのパラメータ渡しの問題

効果は以下のとおりです。ページジャンプボタンをクリックした後 対応する値はページ b で取得できます...

Linux ダイナミックライブラリの生成と使用ガイドの詳細な説明

Linux での動的ライブラリ ファイルのファイル名は libxxx.so のようになります。ここで...

カルーセルアニメーションを実現するVueコンポーネント

この記事では、カルーセルアニメーションを実現するためのVueコンポーネントの具体的なコードを例として...

前後の秒、分、時間、日数を取得するMySQLデータベース

現在の時刻を取得します: current_timestamp を選択します。出力: 2016-06-...