序文最近、面接の準備をしています。 react のいくつかの知識ポイントを確認し、ここにまとめました。 始めるReactライフサイクルReact 16以前のライフサイクルはこんな感じでした コンポーネントは最初にレンダリングされるときにインスタンス化され、その後インスタンス上の componentWillMount、render、および componentDidMount 関数が呼び出されます。コンポーネントは、レンダリングを更新するときに、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、render、および componentDidUpdate 関数を呼び出すことができます。コンポーネントがアンインストールされるときに、componentWillUnmount 関数を呼び出すことができます。 借りた写真: React v16.3 以降では、componentWillMount、componentWillReceiveProps、componentWillUpdate の代わりに getDerivedStateFromProps と getSnapshotBeforeUpdate を使用することが推奨されています。ここで注意すべき点は、新しく追加された 2 つのライフサイクル機能と、元の 3 つのライフサイクル機能は別々に使用する必要があり、混在させることはできないということです。 現在のライフサイクル(借用画像): コンポーネントWillMountの問題 白い画面を回避するために、componentWillMount で事前に非同期リクエストを行うことができると考える人もいます。ただし、React がページをレンダリングするために render を呼び出す場合、render はレンダリング用のデータを取得する前に非同期リクエストが終了するのを待ちません。このように書くと潜在的なリスクが伴います。 また、React Fiber の後では、1 回のレンダリングで複数回呼び出される場合があります。その理由は、React Fiber テクノロジーは増分レンダリングを使用してフレーム落ちの問題を解決しているためです。各タスク ユニットは requestIdleCallback を通じてスケジュールされ、実行され、中断および再開が可能です。ライフサイクルが中断されると、回復後に以前のライフサイクルが再度実行されます。 新しいライフサイクル 静的 getDerivedStateFromProps
更新前にスナップショットを取得する トリガー時間: 更新が発生したとき、レンダリング後、コンポーネント DOM レンダリング前。 リアクトファイバーReact のレンダリング/更新プロセスが開始すると、中断することができず、メインスレッドを占有し続けます。メインスレッドは JS の実行で忙しく、他の処理 (レイアウト、アニメーション) を処理する時間がなく、フレーム ドロップ、応答の遅延 (または応答なし) などのエクスペリエンスの低下につながります。ファイバーが誕生しました。 Fiber は、React Reconciler のコア アルゴリズムを再構築したものです。主な機能は次のとおりです。
インクリメンタル レンダリングは、フレーム落ちの問題を解決するために使用されます。レンダリング タスクを分割した後、毎回小さな部分だけが実行されます。各部分が完了すると、時間制御はメイン スレッドに戻され、以前のように長時間占有されることはありません。 ファイバーツリー
ファイバー ツリーは、実際には単一のリンク リスト構造であり、child は最初の子ノードを指し、return は親ノードを指し、sibling は次の兄弟ノードを指します。構造は次のとおりです。 // ファイバーツリーノード構造 { 状態ノード、 子供、 戻る、 兄弟、 ... } ファイバーリコンサイラ 調整プロセスは 2 つの段階に分かれています。 1. (中断可能) レンダリング/調整は、workInProgressツリーを構築して変更を導出します。 2. (中断不可能な)コミットはこれらのDOMの変更を適用します(DOMツリーを更新し、コンポーネントライフサイクル関数を呼び出し、refなどの内部状態を更新します) workInProgress ツリーを構築するプロセスは、diff のプロセスです。requestIdleCallback を通じてタスクのグループをスケジュールします。各タスクの完了後、キュー ジャンパー (より緊急) があるかどうかを確認します。各タスクのグループが完了したら、次の requestIdleCallback コールバックまで時間制御をメイン スレッドに戻し、workInProgress ツリーの構築を続行します。 ライフサイクルも 2 つの段階に分かれています。 // フェーズ 1 レンダリング/調整 コンポーネントマウント コンポーネントがプロパティを受け取る コンポーネント更新が必要 コンポーネントの更新 //フェーズ2コミット コンポーネントマウント コンポーネントの更新 コンポーネントのマウントを解除する フェーズ 1 のライフサイクル関数は複数回呼び出される場合があります。デフォルトでは低い優先度で実行されます。優先度の高いタスクによって中断された場合は、後で再実行されます。 ファイバーツリーとworkInProgressツリー ダブルバッファリング技術: workInProgress ツリーが構築された後、新しいファイバー ツリーが取得され、現在のポインターが workInProgress ツリーを指すことを意味します。ファイバーと workInProgress は相互に参照を保持しているため、古いファイバーは新しいファイバーの更新用の予約領域として使用され、ファイバー インスタンスの再利用の目的が達成されます。 各ファイバーには代替プロパティがあり、これもファイバーを指します。workInProgress ノードを作成するときは、代替が優先されます。代替がない場合は、作成します。 workInProgress を current.alternate にします。 作業進行中の場合 === null //... workInProgress.alternate = 現在; 現在の代替 = 作業進行中; } それ以外 { // 代替案はすでにあります。 // エフェクトタグをリセットします。 workInProgress.effectTag = 効果なし; // エフェクト リストは無効になりました。 workInProgress.nextEffect = null; workInProgress.firstEffect = null; workInProgress.lastEffect = null; } これを行う利点:
光ファイバー障害復旧 割り込み: 現在処理中の作業単位を確認し、現在の結果 (firstEffect、lastEffect) を保存し、タグを変更し、すぐに終了して別の requestIdleCallback を開き、次回機会があれば実行します。 ブレークポイントの回復: 次に作業単位を処理するときに、タグが中断されたタスクであることがわかり、未完了の部分の実行を続行するか、やり直します。 PS 時間切れによる「自然な」中断であっても、優先度の高いタスクによる無礼な中断であっても、中断メカニズムは同じです。 リアクトセットステートコード内で setState 関数を呼び出した後、React は渡されたパラメーター オブジェクトをコンポーネントの現在の状態とマージし、いわゆる調整プロセスをトリガーします。調整プロセスの後、React は比較的効率的な方法で新しい状態に応じて React 要素ツリーを構築し、UI インターフェース全体の再レンダリングに進みます。 React は要素ツリーを取得した後、新しいツリーと古いツリー間のノードの違いを自動的に計算し、その違いに基づいてインターフェースを最小化して再レンダリングします。差分計算アルゴリズムでは、React はどの位置が変更されたか、どのように変更する必要があるかを比較的正確に把握できるため、完全な再レンダリングではなくオンデマンドの更新が保証されます。 setState は同期的に呼び出される場合(settimeout、カスタム DOM イベント)と、非同期的に呼び出される場合(通常の呼び出し)があります。 ReactイベントメカニズムReact イベントは、イベント プロキシを通じて最も外側のドキュメントに均一に分散され、実際の Dom ノードにバインドされません。 さらに、React はネイティブの Event オブジェクトを内部的にラップします。 stopPropagation() や preventDefault() など、ブラウザのネイティブ イベントと同じインターフェースを備えています。 以上がReactの基礎知識のまとめの詳しい内容です。Reactの基礎知識についてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご注目ください! 以下もご興味があるかもしれません:
|
<<: MySQL でメタデータ ロックがブロックされている場所を確認する方法
>>: VMware Workstation のインストール Linux システム
1. Nginxの同時実行性を最適化する [root@proxy ~]# ab -n 2000 -c...
この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...
フォームを送信するときに、送信前に追加のパラメータが追加される状況が発生する場合があります。この問題...
マスタースレーブレプリケーションモードのクラスターでは、通常、1 つのマスターノードと 2 つ以上の...
目次1. 前提条件1.1 サポートされているプラットフォーム1.2 jdk および hadoop...
まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...
1. テーブル内のフィールドの種類を表示する テーブル名を記述する desc テーブル名 2. テー...
デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...
多くの場合、透明度の設定やぼかしなど、写真の背景を加工する必要があります。 ただし、背景画像が配置さ...
例:ヒント:このコンポーネントはvue-cropperの二次パッケージに基づいていますプラグインをイ...
div で background-color と background-image を同時に設定する...
js 実行字句解析フェーズ: 形式パラメータ解析、変数宣言解析、関数宣言解析の 3 つの部分が含まれ...
まず興味深い性質であるconic-gradientを紹介しましょう。円錐グラデーション!円グラフの作...
テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...
1. 疑似クラスを使用して境界線の半分を表示する <!DOCTYPE html> <...