Reactコンポーネントのライフサイクル機能についての簡単な説明

Reactコンポーネントのライフサイクル機能についての簡単な説明

React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラスや create-react-class モジュールなどのクラス コンポーネントでのみ使用できます。

マウント、更新、アンインストール、エラー処理といういくつかの段階に分かれています。

1. マウント:コンストラクター (よく使用される)、static getDerivedStateFromProps、render (よく使用される)、componentDidMount (よく使用される)

コンストラクターは、クラス コンポーネントのコンストラクターです。ここでは、コンポーネントの状態を初期化したり、メソッドをバインドしたりできます (例:constructor(props){ super(props);this.state={test: 'test'};this.someFn = this.someFn.bind(this);})。それ以外の場合は、コンストラクター メソッドを明示的に実装する必要はありません。

static getDerivedStateFromProps: レンダリング前に呼び出され、次のような値を返すことで状態を変更できます。

静的 getDerivedStateFromProps(nextProps, prevState){
 
    props.test !== state.test の場合{
        return {state: props.state}; //返される部分はpartialStateと呼ばれます
//これは新しい状態の一部となり、nextState は _assign({}, prevState, partialState); になります。
    }
 
    null を返します。 
// null または undefined が返された場合、 nextState は prevState になり、コンポーネントの状態は変更されません。

その唯一の目的は、props が変更されたときにコンポーネントの状態を更新できるようにすることであり、状態の値は props に依存します。理由が何であれ、または shouldComponentUpdate がコンポーネントで false を返す場合でも、レンダリング前に実行されます。

static getDerivedStateFromProps に似たライフサイクルは、componentWillReceiveProps(nextProps) です。ここでは、this.setState({...}); を呼び出して状態を変更します。static getDerivedStateFromProps と componentWillReceiveProps を使用する場合は注意し、パフォーマンスを考慮し、バグを回避してください。必要に応じて、React.PureComponent や React.memo などの完全に制御可能なコンポーネントを検討するか、主要な制御不可能なコンポーネントを使用して、上記の getDerivedStateFromProps と componentWillReceiveProps を置き換えてください。

親コンポーネントが再レンダリングされるときにトリガーされる UNSAFE_componentWillReceiveProps もあります。

Render は、React 要素を返すレンダリング関数です。これは、クラス コンポーネントが実装する必要があるメソッドです。これは、React 要素を返すだけで、インターフェイスと直接やり取りしない純粋な関数です。やり取りは通常、ComponentDidMount や ComponentDidUpdate などのサイクル内に配置されます。render メソッドの戻り値の型は、次のようになります。

// '<div/>' や '<MyComponent/>' などの React 要素になります 
//またはReact.createElement(type, ?props, ?children)で作成された要素、
//配列にすることもできます(配列は this.props.children ['Test', ['nest test'], ...others] の形式に似ています)
//またはフラグメント、
//文字列または数値型(文字列として扱われる)にすることができます。
// ブール型または null にすることができます (ブール型または null の場合、何もレンダリングされません)。
クラスTestはReact.Componentを拡張します。
    与える(){
        // 'Hello Test' を返します。
        //true を返します。
        // ['Hello', ' Test'] を返します。
        //<div>テスト</div> を返す
        // <MyComponent>Test</MyComponent> を返す
        null を返します。
    }
}

componentDidMountは、コンポーネントが React コンポーネント ツリーにマウントされた後に呼び出されます。ここでは、非同期データを取得したり、DOM ノードの初期化に依存したりすることができ、この時点でサブスクリプションを追加するのにも適しています (componentWillUnmount の場合はサブスクリプションを解除することを忘れないでください)。ここで setState を呼び出すと、追加のレンダリングがトリガーされますが、これはブラウザーが画面を更新する前に行われるため、render が 2 回呼び出されても、ユーザーは中間状態を見ることができません。

2. 更新: static getDerivedStateFromProps、shouldComponentUpdate、render (よく使用される)、getSnapshotBeforeUpdate、componentDidUpdate (よく使用される)

shouldComponentUpdate: ReactComponent を継承するコンポーネントで使用できますが、React.PureComponent を継承するコンポーネントでは使用できません。コンポーネントを更新するには true を返します。そうでない場合、shouldComponentUpdate が false を返すと、render メソッドは呼び出されず、componentDidUpdate は呼び出されません。shouldComponentUpdate(nextProps, nextState){} は、this.props と nextProps、this.state と nextState を手動で比較できます。ただし、false を返すと、状態が更新されたときに子コンポーネントが再レンダリングされるのを防ぐことはできません。子コンポーネントが更新されても、親コンポーネントが更新されていないため、新しい props は取得されません。

getSnapshotBeforeUpdate: 最後のレンダリング出力 (DOM ノードに送信) の前に呼び出され、要素が DOM に送信される前に現在の DOM 情報 (現在の DOM スクロール位置など) を収集し、その後、componentDidUpdate サイクル メソッドに渡されるように戻ります (このメソッドは要素が DOM に送信された後に呼び出されるため、この時点で取得された DOM 情報が更新されます)。

componentDidUpdate : componentDidUpdate(prevProps, prevState, snapshot){}; コンポーネントが更新された後に呼び出され、ここで DOM を操作したり、前後の props を比較したり、状態を使用して非同期にデータを要求したりすることができます。3 番目のパラメーターは、コンポーネントのライフサイクル getSnapshotBeforeUpdate の戻り値です。getSnapshotBeforeUpdate が定義されていない場合、componentDidUpdate の 3 番目のパラメーターは未定義になります。

3. アンマウント: componentWillUnmount (よく使われる)

componentWillUnmount: このサイクル メソッドは、コンポーネントがアンインストールされて破棄される前に呼び出されます。タイマーをクリアしたり、ネットワーク要求をキャンセルしたり、サブスクリプションをキャンセルしたりして、メモリを解放できます。

4、静的 getDerivedStateFromError、componentDidCatch;

静的 getDerivedStateFromError:

コンポーネントがキャッチした内容:

参照ドキュメント

Reactコンポーネント

React Component ライフサイクル機能に関するこの記事はこれで終わりです。React Component ライフサイクルに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  Nginx でバージョン番号を隠す方法

>>:  MySql ストアド プロシージャ パラメータの初歩的な使用法の詳細な説明

推薦する

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

CentOS7.4 で JDK1.8 をインストールするためのグラフィカル チュートリアル

Linux インストール JDK1.8 手順1. CentOS に独自の openJDK があるかど...

CentOS 7 に MySQL 8.0.20 データベースをインストールするための詳細なチュートリアル

関連記事: MySQL8.0.20 インストール チュートリアルとインストールの問題に関する詳細なチ...

Mysql インデックスと Redis ジャンプテーブルについての簡単な説明

まとめインタビュー中、MySQL インデックスの問題について議論しているときに、B+ ツリー、B ツ...

Nginx でアンチホットリンクを設定するための手順を完了する

必要:通常、サイト側は、ウェブサイト上の動画や写真が盗まれるのを防ぎたいと考えています。結局のところ...

Vue ミックスインの使用方法とオプションのマージの詳細な説明

目次1. コンポーネントでの使用2. オプションのマージ要約する1. コンポーネントでの使用Mixi...

CentOS8 yum/dnfで国内ソースを設定する方法

CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...

表のセル間の境界線/区切り線を非表示にする方法

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

Vue の nextTick について話す

データが変更されても、DOM ビューはすぐには更新されません。変更直後にノードまたはその値を取得しよ...

MySQLとOracleの誤解の詳細な説明

目次本質的な違いデータベースセキュリティ権限スキーマの移行パターンオブジェクトの類似性スキーマオブジ...

MySQLデータベースのSYNフラッディング問題を解決する

Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...

div を下から上にスライドさせる CSS3 の例

1. まず、CSS3 のターゲット セレクターを使用し、a タグを使用して id セレクターを指定し...

画像ボタンをフォームのリセットボタンとして使用する方法

フォームを作成するときに、送信ボタンとリセットボタンを配置することがよくあります。ページの外観を考慮...

ウェブデザイナーが持つべき資質と能力

Web デザインは、インターネットの出現後に誕生した新興の周辺産業です。 Web ページは店頭のよう...