目次
react フックの実装方法
preact フックの実装方法
ホームページ ウェブフロントエンド jsチュートリアル React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

Apr 20, 2022 pm 08:52 PM
react

reactフックを実装するにはどうすればよいですか? React Hooks の実装は Fiber に依存する必要がありますか?次の記事では、さまざまなフレームワークでのフックの実装方法について説明します。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

React のフックはファイバーの後に登場した機能であるため、多くの人がフックの実装にはファイバーに依存する必要があると誤解していますが、実際にはそうではありません。両者の間に必要な接続はありません。 [関連する推奨事項: Redis ビデオ チュートリアル ]

現在、フックは React だけでなく、Preact、React ssr、Midway などのフレームワークにも実装されていますが、その実装は繊維に依存しない。

これらのさまざまなフレームワークのフックがどのように実装されているかを見てみましょう:

react フックの実装方法

react は、jsx インターフェイスを通じて説明されています。 、babel や tsc などのコンパイル ツールによってレンダリング関数にコンパイルされ、vdom を生成するために実行されます。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

ここでのレンダリング関数は、React17 より前の React.createElement でした。 :

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

React 17 以降は jsx に変更されました:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

この jsx ランタイムは自動的に導入されるため、インストールする必要はありません各コンポーネントは React インポートを保持する必要があります。

レンダー関数の実行により vdom が生成されます:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

vdom の構造は次のとおりです:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

React16 より前では、この vdom は再帰的にレンダリングされ、実際の dom を追加、削除、変更していました。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

React16 でファイバー アーキテクチャが導入された後、追加の手順が追加されました。まず vdom をファイバーに変換し、次にファイバーをレンダリングします。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

vdom をファイバーに変換するプロセスはリコンサイルと呼ばれ、実際の dom を追加、削除、または変更する最終プロセスはコミットと呼ばれます。

なぜこの変換を行う必要があるのでしょうか?

vdom は子ノード child への参照のみを持ち、親ノードparent や他の兄弟ノードへの参照を持たないため、結果として、すべての vdom ノードを一度に再帰的に dom にレンダリングする必要があります。中断します。

中断された場合はどうなりますか?親ノードと兄弟ノードは記録されないため、子ノードの処理のみを続行できますが、vdom の他の部分は処理できません。

これが、React がこの種のファイバー構造を導入した理由です。つまり、親ノードの戻り、子ノードの子、兄弟ノードの兄弟などの参照があり、これらの参照は中断される可能性があります。その後復元すると、未処理のアイテムがすべて見つかります。

ファイバー ノードの構造は次のとおりです。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

このプロセスは中断することができ、当然、スケジュールすることもできます。これがスケジュール プロセスです。

したがって、ファイバー アーキテクチャは、スケジュール、リコンサイル (vdom をファイバーに変換)、およびコミット (dom に更新) の 3 つの段階に分かれています。

関数コンポーネントでフックを使用すると、ファイバー ノードに保存されている一部の値にアクセスできます。

たとえば、この関数コンポーネントでは 6 つのフックが使用されています:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

この場合、対応するファイバー ノードには 6 つの要素の MemorydState リンク リストがあります:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

次まで連結:

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

さまざまなフックが、memoryedState リンク リストのさまざまな要素の値にアクセスします。これは反応です。フックの原理。

このリンクされたリストには作成フェーズと更新フェーズがあるため、useXxx の最終実装は mountXxx と updateXxx に分割されていることがわかります。ここでのマウント フェーズは、フック ノードを作成し、それらをリンク リストに組み立てます。

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

#作成されたフック リンク リストは、ファイバー ノードの MemorydState 属性にリンクされます。

更新時には、ファイバー ノードからフック リストを自然に取り出すことができます。

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

このようにして、複数のレンダリングで useXxx の API をファイバー ノード で対応する MemorydState を見つけます。

これは React フックの原理で、ファイバー ノードにフックが格納されていることがわかります。

preact との違いは何ですか?

preact フックの実装方法

preact は、react コードと互換性のある、より軽量なフレームワークであり、クラス コンポーネントと関数コンポーネントに加え、フックなどの React 機能もサポートしています。 . .ただし、ファイバー アーキテクチャは実装されていません。

これは、最終的なパフォーマンスではなく、最終的なサイズ (わずか 3 kb) を主に考慮しているためです。

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

react がファイバー ノードにフック リストを保存することを学びました。preact にファイバー ノードがない場合、フック リストはどこに保存されるのでしょうか?

実際のところ、ファイバーはパフォーマンスを向上させるために vdom を変更しただけであり、vdom と本質的な違いはないと考えられがちですが、vdom にフックを保存するだけで十分でしょうか?

実際、preact はフック リストを vdom に配置します。

たとえば、この関数コンポーネントには 4 つのフックがあります:

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

その実装は、vdom 上の対応するフックにアクセスすることです:

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

react のようにフックをマウントと更新の 2 段階に分割するのではなく、それらをマージして処理します。

図に示すように、component.__hooks の配列にフックを格納し、添字を通じてアクセスします。

このコンポーネントは vdom の属性です:

1React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

つまり、フックの値は 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 のレンダリング メソッドを使用する:

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

ssr の場合に反応を使用する - dom/server の renderToString メソッドまたは renderToStream メソッド:

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

vdom からファイバーへの変換は ssr 中に行われると思いますか?

絶対に違います。ファイバーは、ブラウザーで実行するときのレンダリング パフォーマンスを向上させ、計算を中断可能にし、アイドル時に計算を実行するために導入された構造です。

サーバー側のレンダリングには当然ファイバーは必要ありません。

ファイバーが必要ない場合、フックリストはどこに保存されますか?ヴドム?

確かに vdom に配置できますが、そうではありません。

たとえば useRef フック:

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

firstWorkInProgressHook から始まり next と連結されたリンク リストです。

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

createHook を使用して firstWorkInProgressHook によって作成された最初のフック ノード:

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

は vdom 上位にマウントされていません。 ######なぜ?

ssr は一度レンダリングするだけで済み、更新する必要がないため、vdom 上でハングアップする必要はありません。

各コンポーネントのフックの処理が完了するたびにフック リストをクリアするだけです:

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

#つまり、react ssr を実行すると、グローバル変数にフックが存在します。

react csr と ssr のフックの実装原則の違いを比較します。

  • csr は vdom からファイバーを作成してレンダリングを中断可能にし、アイドル スケジューリングを通じてパフォーマンスを向上させます。 vdom は直接レンダリングされます

  • フックは csr のファイバー ノードに保存され、ssr のグローバル変数に直接配置されます。オンでは、各コンポーネントは処理後にクリアされます。二度目には使用されないため、

  • #csr はフックの作成と更新を 2 つのフェーズ (マウントと更新) に分割しますが、ssr は 1 回だけ処理され、作成フェーズ
#フックの実装原理は実際には複雑ではありません。リンクされたリストを特定のコンテキストに保存し、フック API が対応するデータにアクセスすることです。リンク リストのさまざまな要素を使用して、それぞれのロジックを完成させます。このコンテキストは、vdom、ファイバー、またはグローバル変数にすることもできます。

しかし、フックのアイデアは依然として非常に人気があり、タオバオによって作成されたサーバーサイド フレームワーク途中でフックのアイデアが導入されました。フックの実装方法

midway は Node.js フレームワークです:

サーバー側フレームワークには当然、vdom や vdom などの構造はありません。ファイバーですが、フックの考え方はこれらに依存していません。フック API を実装するには、リンクされたリストを特定のコンテキストに配置するだけです。

midway は反応フックに似た API を実装しました: 2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?

2React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか? フック リストがどこにあるかわかりませんフックの実装原理はすでにマスターしていますので、フック リストを保存するコンテキストがある限り、どこにでも保存できます。

React でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?概要

react フックは、react Fiber アーキテクチャの後に登場した機能です。多くの人は、フックは Fiber で実装する必要があると誤解しています。私たちは、react について見てきました。 preact、react ssr でのフックの実装、および途中でこれが当てはまらないことが判明しました:

react は vdom をファイバーに変換し、フック リストを Fiber.memorizedState 属性に保存し、それを連結しますnext## を介して

#preact はファイバーを実装しません。vnode._component._hooks 属性にフック リストを配置し、それを配列として実装します。サブスクリプトを介して

react ssr にアクセスする場合、ファイバーは実装されません必要ですが、フックが実装されていません。リンク リストは vdom にハングされますが、レンダリングする必要があるのは 1 回だけであり、グローバル変数はコンポーネントのレンダリング後にクリアできるため、グローバル変数に直接配置されます。
  • midway は Node.js フレームワークであり、フックに似た API については詳しく説明していませんが、フック リストを保存するコンテキストがある限り、問題はありません。
  • #それでは、反応フックを実装するにはファイバーに依存する必要があるのでしょうか?
  • 明らかにそうではありません。ファイバー、vdom、グローバル変数、または任意のコンテキストと組み合わせることができます。
  • プログラミング関連の知識について詳しくは、
  • プログラミング ビデオ
  • をご覧ください。 !

以上がReact でフックを実装するにはどうすればよいですか?ファイバーに依存する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

React と WebSocket を使用してリアルタイム チャット アプリを構築する方法 React と WebSocket を使用してリアルタイム チャット アプリを構築する方法 Sep 26, 2023 pm 07:46 PM

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

React フロントエンドとバックエンドの分離ガイド: フロントエンドとバックエンドの分離と独立したデプロイメントを実現する方法 React フロントエンドとバックエンドの分離ガイド: フロントエンドとバックエンドの分離と独立したデプロイメントを実現する方法 Sep 28, 2023 am 10:48 AM

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

React と Flask を使用してシンプルで使いやすい Web アプリケーションを構築する方法 React と Flask を使用してシンプルで使いやすい Web アプリケーションを構築する方法 Sep 27, 2023 am 11:09 AM

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

React と RabbitMQ を使用して信頼性の高いメッセージング アプリを構築する方法 React と RabbitMQ を使用して信頼性の高いメッセージング アプリを構築する方法 Sep 28, 2023 pm 08:24 PM

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

React コード デバッグ ガイド: フロントエンドのバグをすばやく見つけて解決する方法 React コード デバッグ ガイド: フロントエンドのバグをすばやく見つけて解決する方法 Sep 26, 2023 pm 02:25 PM

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

React Router ユーザーガイド: フロントエンドルーティング制御の実装方法 React Router ユーザーガイド: フロントエンドルーティング制御の実装方法 Sep 29, 2023 pm 05:45 PM

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

React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法 React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法 Sep 26, 2023 pm 06:12 PM

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

React と Apache Kafka を使用してリアルタイム データ処理アプリケーションを構築する方法 React と Apache Kafka を使用してリアルタイム データ処理アプリケーションを構築する方法 Sep 27, 2023 pm 02:25 PM

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

See all articles