React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?
reactフックを実装するにはどうすればよいですか? React Hooks の実装は Fiber に依存する必要がありますか?次の記事では、さまざまなフレームワークでのフックの実装方法について説明します。
React のフックはファイバーの後に登場した機能であるため、多くの人がフックの実装にはファイバーに依存する必要があると誤解していますが、実際にはそうではありません。両者の間に必要な接続はありません。 [関連する推奨事項: Redis ビデオ チュートリアル ]
現在、フックは React だけでなく、Preact、React ssr、Midway などのフレームワークにも実装されていますが、その実装は繊維に依存しない。
これらのさまざまなフレームワークのフックがどのように実装されているかを見てみましょう:
react フックの実装方法
react は、jsx インターフェイスを通じて説明されています。 、babel や tsc などのコンパイル ツールによってレンダリング関数にコンパイルされ、vdom を生成するために実行されます。
ここでのレンダリング関数は、React17 より前の React.createElement でした。 :
React 17 以降は jsx に変更されました:
この jsx ランタイムは自動的に導入されるため、インストールする必要はありません各コンポーネントは React インポートを保持する必要があります。
レンダー関数の実行により vdom が生成されます:
vdom の構造は次のとおりです:
React16 より前では、この vdom は再帰的にレンダリングされ、実際の dom を追加、削除、変更していました。
React16 でファイバー アーキテクチャが導入された後、追加の手順が追加されました。まず vdom をファイバーに変換し、次にファイバーをレンダリングします。
vdom をファイバーに変換するプロセスはリコンサイルと呼ばれ、実際の dom を追加、削除、または変更する最終プロセスはコミットと呼ばれます。
なぜこの変換を行う必要があるのでしょうか?
vdom は子ノード child への参照のみを持ち、親ノードparent や他の兄弟ノードへの参照を持たないため、結果として、すべての vdom ノードを一度に再帰的に dom にレンダリングする必要があります。中断します。
中断された場合はどうなりますか?親ノードと兄弟ノードは記録されないため、子ノードの処理のみを続行できますが、vdom の他の部分は処理できません。
これが、React がこの種のファイバー構造を導入した理由です。つまり、親ノードの戻り、子ノードの子、兄弟ノードの兄弟などの参照があり、これらの参照は中断される可能性があります。その後復元すると、未処理のアイテムがすべて見つかります。
ファイバー ノードの構造は次のとおりです。
このプロセスは中断することができ、当然、スケジュールすることもできます。これがスケジュール プロセスです。
したがって、ファイバー アーキテクチャは、スケジュール、リコンサイル (vdom をファイバーに変換)、およびコミット (dom に更新) の 3 つの段階に分かれています。
関数コンポーネントでフックを使用すると、ファイバー ノードに保存されている一部の値にアクセスできます。
たとえば、この関数コンポーネントでは 6 つのフックが使用されています:
この場合、対応するファイバー ノードには 6 つの要素の MemorydState リンク リストがあります:
次まで連結:
さまざまなフックが、memoryedState リンク リストのさまざまな要素の値にアクセスします。これは反応です。フックの原理。
このリンクされたリストには作成フェーズと更新フェーズがあるため、useXxx の最終実装は mountXxx と updateXxx に分割されていることがわかります。ここでのマウント フェーズは、フック ノードを作成し、それらをリンク リストに組み立てます。
#作成されたフック リンク リストは、ファイバー ノードの MemorydState 属性にリンクされます。
更新時には、ファイバー ノードからフック リストを自然に取り出すことができます。
このようにして、複数のレンダリングで useXxx の API をファイバー ノード で対応する MemorydState を見つけます。
これは React フックの原理で、ファイバー ノードにフックが格納されていることがわかります。
preact との違いは何ですか?
preact フックの実装方法
preact は、react コードと互換性のある、より軽量なフレームワークであり、クラス コンポーネントと関数コンポーネントに加え、フックなどの React 機能もサポートしています。 . .ただし、ファイバー アーキテクチャは実装されていません。
これは、最終的なパフォーマンスではなく、最終的なサイズ (わずか 3 kb) を主に考慮しているためです。
react がファイバー ノードにフック リストを保存することを学びました。preact にファイバー ノードがない場合、フック リストはどこに保存されるのでしょうか?
実際のところ、ファイバーはパフォーマンスを向上させるために vdom を変更しただけであり、vdom と本質的な違いはないと考えられがちですが、vdom にフックを保存するだけで十分でしょうか?
実際、preact はフック リストを vdom に配置します。
たとえば、この関数コンポーネントには 4 つのフックがあります:
その実装は、vdom 上の対応するフックにアクセスすることです:
react のようにフックをマウントと更新の 2 段階に分割するのではなく、それらをマージして処理します。
図に示すように、component.__hooks の配列にフックを格納し、添字を通じてアクセスします。
このコンポーネントは vdom の属性です:
つまり、フックの値は vnode._component._hooks の配列に格納されます。
フックの実装におけるreactとpreactの違いを比較してください:
reactではフックリストはfiberNode.memorizedStateプロパティに保存されますが、preactではフックがリストは vnode._component._hooks 属性に保存されます
-
react のフック リストは next で連結され、preact のフック リストは配列であり、サブスクリプトを介してアクセスされます
-
react はフックのリンク リストの作成と更新を分離します。つまり、useXxx は mountXxx と updateXxx に分割されて実装され、preact はそれらをマージして
## を処理します。
フックの実装はファイバーに依存しません。コンポーネントに対応するフック データを保存する場所を見つけるだけです。レンダリング中に取得する必要があるだけです。どこにあるかは関係ありません。保管されています。
vdom と Fiber はコンポーネントのレンダリングに強く関連しているため、これらの構造に格納されます。 react ssr がフックを実装するのと同様に、それらはファイバーにも vdom にも存在しません:react ssr はどのようにフックを実装しますか
実際には、react In csr に加えて、-dom パッケージは ssr: csr の場合に反応 - dom のレンダリング メソッドを使用する:- csr は vdom からファイバーを作成してレンダリングを中断可能にし、アイドル スケジューリングを通じてパフォーマンスを向上させます。 vdom は直接レンダリングされます
- フックは csr のファイバー ノードに保存され、ssr のグローバル変数に直接配置されます。オンでは、各コンポーネントは処理後にクリアされます。二度目には使用されないため、 #csr はフックの作成と更新を 2 つのフェーズ (マウントと更新) に分割しますが、ssr は 1 回だけ処理され、作成フェーズ
しかし、フックのアイデアは依然として非常に人気があり、タオバオによって作成されたサーバーサイド フレームワーク途中でフックのアイデアが導入されました。フックの実装方法
midway は Node.js フレームワークです:サーバー側フレームワークには当然、vdom や vdom などの構造はありません。ファイバーですが、フックの考え方はこれらに依存していません。フック API を実装するには、リンクされたリストを特定のコンテキストに配置するだけです。
midway は反応フックに似た API を実装しました:
フック リストがどこにあるかわかりませんフックの実装原理はすでにマスターしていますので、フック リストを保存するコンテキストがある限り、どこにでも保存できます。
概要
react は vdom をファイバーに変換し、フック リストを Fiber.memorizedState 属性に保存し、それを連結しますnext## を介して
#preact はファイバーを実装しません。vnode._component._hooks 属性にフック リストを配置し、それを配列として実装します。サブスクリプトを介して react ssr にアクセスする場合、ファイバーは実装されません必要ですが、フックが実装されていません。リンク リストは vdom にハングされますが、レンダリングする必要があるのは 1 回だけであり、グローバル変数はコンポーネントのレンダリング後にクリアできるため、グローバル変数に直接配置されます。- midway は Node.js フレームワークであり、フックに似た API については詳しく説明していませんが、フック リストを保存するコンテキストがある限り、問題はありません。 #それでは、反応フックを実装するにはファイバーに依存する必要があるのでしょうか?
- 明らかにそうではありません。ファイバー、vdom、グローバル変数、または任意のコンテキストと組み合わせることができます。
- プログラミング関連の知識について詳しくは、
- プログラミング ビデオ をご覧ください。 !
以上がReact でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









React と WebSocket を使用してリアルタイム チャット アプリケーションを構築する方法 はじめに: インターネットの急速な発展に伴い、リアルタイム コミュニケーションがますます注目を集めています。ライブチャット アプリは、現代の社会生活や仕事生活に不可欠な部分になっています。この記事では、React と WebSocket を使用して簡単なリアルタイム チャット アプリケーションを構築する方法と、具体的なコード例を紹介します。 1. 技術的な準備 リアルタイム チャット アプリケーションの構築を開始する前に、次のテクノロジとツールを準備する必要があります。 React: 構築用の 1 つ

React フロントエンドとバックエンドの分離ガイド: フロントエンドとバックエンドの分離と独立したデプロイメントを実現する方法、特定のコード例が必要です 今日の Web 開発環境では、フロントエンドとバックエンドの分離がトレンドになっています。フロントエンド コードとバックエンド コードを分離することで、開発作業がより柔軟かつ効率的になり、チームのコラボレーションが促進されます。この記事では、React を使用してフロントエンドとバックエンドの分離を実現し、それによって分離と独立したデプロイの目標を達成する方法を紹介します。まず、フロントエンドとバックエンドの分離とは何かを理解する必要があります。従来の Web 開発モデルでは、フロントエンドとバックエンドが結合されています。

React と Flask を使用してシンプルで使いやすい Web アプリケーションを構築する方法 はじめに: インターネットの発展に伴い、Web アプリケーションのニーズはますます多様化および複雑化しています。使いやすさとパフォーマンスに対するユーザーの要件を満たすために、最新のテクノロジー スタックを使用してネットワーク アプリケーションを構築することがますます重要になっています。 React と Flask は、フロントエンドおよびバックエンド開発用の 2 つの非常に人気のあるフレームワークであり、うまく連携してシンプルで使いやすい Web アプリケーションを構築します。この記事では、React と Flask を活用する方法について詳しく説明します。

React と RabbitMQ を使用して信頼性の高いメッセージング アプリケーションを構築する方法 はじめに: 最新のアプリケーションは、リアルタイム更新やデータ同期などの機能を実現するために、信頼性の高いメッセージングをサポートする必要があります。 React はユーザー インターフェイスを構築するための人気のある JavaScript ライブラリであり、RabbitMQ は信頼性の高いメッセージング ミドルウェアです。この記事では、React と RabbitMQ を組み合わせて信頼性の高いメッセージング アプリケーションを構築する方法を紹介し、具体的なコード例を示します。 RabbitMQ の概要:

React コード デバッグ ガイド: フロントエンドのバグをすばやく見つけて解決する方法 はじめに: React アプリケーションを開発するとき、アプリケーションをクラッシュさせたり、不正な動作を引き起こしたりする可能性のあるさまざまなバグに遭遇することがよくあります。したがって、デバッグ スキルを習得することは、すべての React 開発者にとって不可欠な能力です。この記事では、フロントエンドのバグを見つけて解決するための実践的なテクニックをいくつか紹介し、読者が React アプリケーションのバグをすばやく見つけて解決できるようにする具体的なコード例を示します。 1. デバッグツールの選択: In Re

ReactRouter ユーザーガイド: フロントエンドルーティング制御の実装方法 シングルページアプリケーションの人気に伴い、フロントエンドルーティングは無視できない重要な部分になりました。 React エコシステムで最も人気のあるルーティング ライブラリとして、ReactRouter は豊富な機能と使いやすい API を提供し、フロントエンド ルーティングの実装を非常にシンプルかつ柔軟にします。この記事では、ReactRouter の使用方法と具体的なコード例を紹介します。 ReactRouter を最初にインストールするには、次のものが必要です

React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法 はじめに: 今日の情報爆発の時代において、データ分析はさまざまな業界で不可欠なリンクとなっています。中でも、高速かつ効率的なデータ分析アプリケーションを構築することは、多くの企業や個人が追求する目標となっています。この記事では、React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法を紹介し、詳細なコード例を示します。 1. 概要 React はビルドするためのツールです

React と Apache Kafka を使用してリアルタイム データ処理アプリケーションを構築する方法 はじめに: ビッグ データとリアルタイム データ処理の台頭により、リアルタイム データ処理アプリケーションの構築が多くの開発者の追求となっています。人気のあるフロントエンド フレームワークである React と、高性能分散メッセージング システムである Apache Kafka を組み合わせることで、リアルタイム データ処理アプリケーションを構築できます。この記事では、React と Apache Kafka を使用してリアルタイム データ処理アプリケーションを構築する方法を紹介します。
