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 ストアド プロシージャ パラメータの初歩的な使用法の詳細な説明

推薦する

Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...

初心者がソースコードからMySQLのデッドロック問題を理解する

夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

MySQLのストレージエンジンの詳細な説明

MySQL ストレージ エンジンの概要ストレージ エンジンとは何ですか? MySQL のデータは、さ...

Vue の foreach 配列と js の traversal 配列の書き方の説明

Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...

トランザクション分離レベルのMySQLケース分析

目次1. 理論シリアル化可能繰り返し読み取りコミットされた読み取りコミットされていない読み取り2. ...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

Tencent Cloud Server Tomcat ポートにアクセスできない場合の解決策

最近、Tencent Cloudを使用してサーバーを設定しました。使用中に、tomcatポートにアク...

Docker で Redis センチネル モードを構成する方法 (複数のサーバー上)

目次序文状態DockerをインストールするRedisのマスターノードとスレーブノードを構成する序文以...

レスポンシブウェブデザインを実現するためにIEでCSS3メディアクエリをサポートする

今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...

ラムダ式の原則と例

ラムダ式ラムダ式 (クロージャとも呼ばれる) は、Java 8 のリリースを推進した最も重要な新機能...

Vueの計算プロパティの詳細な説明

1. 計算属性とは何ですか? 簡単に言えば、計算された結果が属性に保存されるもので、キャッシュとして...

MySQL 学習ノート: 完全な SELECT ステートメントの使用例と詳細な説明

この記事では、MySQL 学習ノートの select ステートメントの完全な使用方法を例を使用して説...

CSSを使用してアダプティブスクエアを実装する方法の例

伝統的な方法は、正方形を固定形式で書くことです。長さ=幅を直接書き、次のように固定値を書きます。 。...

OpenShift のクイックインストールの詳細な手順

OpenShift 3.9 の最新バージョンを体験する最も早い方法。準備 [root@host ~]...