「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React ソースコードでの MessageChannel の使用法

React ソースコードでの MessageChannel の使用法

2024 年 11 月 8 日に公開
ブラウズ:956

この記事では、React ソース コードでの MessageChannel の使用状況を分析します。

MessageChannel usage in React source code

まず、MessageChannel とは何かを理解しましょう。

メッセージチャンネル

チャネル メッセージング API の MessageChannel インターフェイスを使用すると、新しいメッセージ チャネルを作成し、その 2 つの MessagePort プロパティを介してデータを送信できます。

次の例は MDN ドキュメントから抜粋したものです。MessageChannel() コンストラクターを使用して新しいチャネルが作成されていることがわかります。

IFrame が読み込まれたら、MessageChannel.port1 の onmessage ハンドラーを登録し、メッセージとともに window.postMessage メソッドを使用して MessageChannel.port2 を IFrame に転送します。

IFrame からメッセージが返されると、onMessage 関数はメッセージを段落に出力します。


const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");
// Wait for the iframe to load
iframe.addEventListener("load", onLoad);
function onLoad() {
  // Listen for messages on port1
  channel.port1.onmessage = onMessage;
  // Transfer port2 to the iframe
  iframe.contentWindow.postMessage("Hello from the main page!", "*", [
   channel.port2,
  ]);
}
// Handle messages received on port1
function onMessage(e) {
 output.innerHTML = e.data;
}


さて、MessageChannel の基本を理解したところで、React ソース コードでの使用法を学びましょう。

React ソース コードでの MessageChannel の使用:


const channel = new MessageChannel();
channel.port1.onmessage = callback;
channel.port2.postMessage(undefined);


React での使用方法は次のとおりです:

  • 新しい MessageChannel インスタンスを作成する: React は 2 つの通信ポートを持つ新しい MessageChannel を作成します。

  • postMessage を使用してタスクをスケジュールする: React は port2.postMessage(unknown) を使用して、setTimeout または setImmediate.

  • で発生する可能性のある遅延や干渉なしでタスクを非同期にトリガーします。
  • onmessage がトリガーされたときにタスクを実行する: port1.onmessage が投稿されたメッセージを受信すると、タスク (enqueueTask に渡されるコールバック) が実行されます。

setTimeout または setImmediate を使用しないのはなぜですか? React コードは、setTimeout または setImmediate が常に正確であるとは限らず、スロットル、テスト環境、またはその他の最適化 (テスト環境での偽のタイマーなど) の影響を受ける可能性があるため、ブラウザー環境での setTimeout または setImmediate の使用を避けたいことを示唆しています。 React は、特に非同期レンダリングと更新に関して、スケジュールを細かく制御する必要があります。

MessageChannel usage in React source code

私たちについて:

Think Throo では、オープンソース プロジェクトで使用される高度なコードベース アーキテクチャの概念を教えることを使命としています。

Next.js/React の高度なアーキテクチャ概念を実践してコーディング スキルを 10 倍にし、ベスト プラクティスを学び、本番レベルのプロジェクトを構築します。

私たちはオープンソースです — https://github.com/thinkthroo/thinkthroo (スターを付けてください!)

コードベース アーキテクチャに基づいた高度なコースでチームのスキルを向上させます。詳細については、[email protected] までお問い合わせください。

参考文献:

  • https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel

  • https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/shared/enqueueTask.js#L42

リリースステートメント この記事は次の場所に転載されています: https://dev.to/thinkthroo/messagechannel-usage-in-react-source-code-3771?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3