Web ワーカーを使用して React で非同期タスクを実行する方法
React を使用していると、遅かれ早かれ、プロセスに問題があるかどうかを確認するために API を頻繁にチェックするなど、時間のかかるタスクを実行する必要がある状況に遭遇することになります。終了した。うまく対処しないと、アプリがクラッシュしたり、ブラウザが飽和状態になったりする可能性があります。それを回避するには、Web Workers を使用できます。
バックエンドで生成されるレポートのステータスを監視するために作成した例を説明します。
何をしなければなりませんか?
API を呼び出してレポート生成プロセスを開始します。
そのタスクを識別する task_id を取得します。
タスクが完了したかどうかを 30 秒ごとに確認します。
ユーザー インターフェイスに影響を与えることなく、これらすべてを処理します。
ここでのコツは、Web Worker を使用することです。Web Worker は、アプリをブロックせずにすべての面倒な作業を行うバックグラウンド ヘルパーのようなものです。
コード
ステップ 1: API 用に Axios を構成する
最初に、API に接続できるように Axios を準備します。ここでは、ベース URL と必要なヘッダーを持つクライアントを構成します。
import axios from "axios"; export const apiClient = axios.create({ baseURL: "https://example.com/api", // Cambia esta URL por la base de tu API headers: { "Content-Type": "application/json", Accept: "application/json", }, });
ステップ 2: Web ワーカーを作成する
Web Worker は魔法が起こる場所です。基本的に、この男は 30 秒ごとに API をチェックして、タスクがすでに完了しているかどうかを確認しています。
self.onmessage = async (event) => { const { task_id, apiEndpoint } = event.data; const checkTaskStatus = async () => { try { const response = await fetch(`${apiEndpoint}/${task_id}`); const task = await response.json(); self.postMessage(task); if (task.status !== "SUCCESS" && task.status !== "FAILURE") { setTimeout(checkTaskStatus, 30000); } } catch (error) { console.error("Error en el Worker:", error); } }; checkTaskStatus(); };
ステップ 3: React でワーカーを管理する
React アプリでは、この Web ワーカーを制御する必要があります。Web ワーカーを起動し、データを渡し、送信される応答を管理します。
export class AsyncTaskManager { private worker: Worker | null = null; public async startTask(taskId: string, apiEndpoint: string, onResult: (data: any) => void) { if (this.worker) { this.worker.terminate(); } this.worker = new Worker(new URL("./GenericWorker.js", import.meta.url), { type: "module" }); this.worker.postMessage({ task_id: taskId, apiEndpoint }); this.worker.onmessage = (event) => { const data = event.data; onResult(data); if (data.status === "SUCCESS" || data.status === "FAILURE") { this.stopWorker(); } }; } public stopWorker() { if (this.worker) { this.worker.terminate(); this.worker = null; } } }
ステップ 4: コンポーネントで使用する
React コンポーネントでは、AsyncTaskManager を使用してタスクを管理します。このプロセスには、タスクの開始、読み込みの表示、およびタスクの結果を受信したときのステータスの更新が含まれます。
import React, { useState } from "react"; import { AsyncTaskManager } from "./AsyncTaskManager"; const taskManager = new AsyncTaskManager(); export const ExampleComponent = () => { const [isLoading, setIsLoading] = useState(false); const [result, setResult] = useState(null); const handleStartTask = async () => { setIsLoading(true); // Simula el inicio de una tarea en el backend const response = await fetch("https://example.com/api/start-task", { method: "POST", headers: { "Content-Type": "application/json", }, }); const { task_id } = await response.json(); taskManager.startTask(task_id, "https://example.com/api/task-status", (data) => { if (data.status === "SUCCESS" || data.status === "FAILURE") { setIsLoading(false); setResult(data.result); // Maneja el resultado de la tarea } }); }; return ( <div> <button onClick={handleStartTask} disabled={isLoading}> {isLoading ? "Procesando..." : "Iniciar Tarea"} </button> {result && <div>Resultado: {JSON.stringify(result)}</div>} </div> ); };
流れの説明
レポートの生成: [タスクの開始] をクリックすると、レポート生成プロセスを開始する API が呼び出され、task_id が返されます。
バックグラウンドモニタリング: この task_id を受信し、30 秒ごとにステータス API にクエリを実行し、タスクのステータスを React に送り返す Web ワーカーを使用します。
UI を更新: タスクの実行中、UI は流動的な状態を保ち、ボタンに「処理中...」と表示され、タスクが完了すると結果が表示されます。
リソースの解放: タスクが完了すると (成功または失敗のいずれか)、ワーカーはリソースを解放し、不要なバックグラウンド プロセスを回避するために停止します。
なぜこのようになるのでしょうか?
このアプローチは次の理由から非常に便利です:
API のクエリ中にユーザー インターフェイスをブロックしません。
アプリがフリーズすることなく、長時間のプロセスを処理できます。
ユーザーは、ローダーと通知のおかげで、何が起こっているかを常に把握できます。
以上がWeb ワーカーを使用して 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)

ホットトピック











さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。
