React は、開発者が Web およびモバイルベースのアプリケーションを作成するために使用するオープンソースの JavaScript ライブラリであり、インタラクティブなユーザー インターフェイスと UI コンポーネントの構築をサポートします。 React は Facebook のソフトウェア エンジニア Jordan Walke によって作成されました。React の最初のバージョンは 7 年前にリリースされ、現在は Facebook によってメンテナンスされています。 React フレームワークの最初のリリース以来、React の人気は急上昇し、成長し続けています。 簡単に言えば、並行モードとサスペンスにより、ユーザーはデータの読み込み、読み込みステータス、およびユーザー インターフェイスの操作をよりスムーズかつシームレスに処理できるようになります。 並行モードでは、React はコストが高く緊急でないコンポーネントのレンダリングを一時停止し、UI レンダリングなどのより緊急なタスクに集中することで、アプリケーションの応答性を常に維持し、白い画面やフリーズなどの現象を回避できます。 この記事では主に、同時実行モードとサスペンス モードでのデータ抽出機能について詳しく説明します。 なぜ同時実行モードが必要なのでしょうか?ご存知のとおり、JavaScript フレームワークまたはライブラリはシングルスレッドワーカーです。したがって、1 つのコード ブロックが実行されると、残りのブロックは実行を待機する必要があります。複数の作業スレッドを同時に実行できません。インターフェースのレンダリングについても同様です。 具体的な問題製品アプリケーションをフィルタリングするために、選択可能な長いリストを表示する必要があるとします。レコードをフィルタリングするには検索ボックスを使用します。設計上、ユーザーが検索ボタンをクリックすると、ユーザー インターフェイスが更新され、関連データがリストされる必要があります。 リストが長すぎてデータが多すぎる場合、UI が「途切れる」、つまりレンダリングがユーザーに見える状態になります。この遅延により、製品のパフォーマンスも大幅に低下します。開発者は、スロットリングやデシェイキングなどのテクニックを使用できますが、これらは役立つものの、完璧な解決策ではありません。 デバウンスは、事前に決められた時間の間、関数の呼び出しを無視します。関数呼び出しは、あらかじめ決められた時間が経過した後にのみ行われます。 次の図は、妨害現象を説明しています。 中断のないレンダリング中断可能なレンダリングを使用すると、React.js はリストの処理と再レンダリング中に UI をブロックしません。単純な作業を一時停止し、DOM を更新し、UI が遅れないようにすることで、React.js をより細かく制御します。 React は、ユーザー入力と並行して入力ボックスを更新または再描画します。 React はユーザー入力を消費し、入力ボックスを並列に再描画します。メモリ内のリストも更新されます。 React は更新が完了すると、DOM を更新し、ユーザーのディスプレイにリストを再レンダリングします。本質的に、中断のないレンダリングにより、React は「マルチタスク」を実行できます。この機能により、よりスムーズな UI エクスペリエンスが実現します。 同時実行モード並行モードは、React アプリケーションの応答性を維持し、ユーザーのデバイスとネットワーク速度の機能にスムーズに適応できるようにする機能セットです。同時実行モードでは、タスクが小さなチャンクに分割されます。 React のスケジューラは実行するジョブを選択できます。ジョブのスケジュールは優先度に応じて異なります。タスクに優先順位を付けることにより、些細なことや緊急でないことを中止したり、さらに先送りしたりすることができます。 React は常に UI の更新とレンダリングを最優先します。 同時実行モードを使用すると、次のことが可能になります。
並行モードでは、UI レンダリングに加えて、受信データへの応答性、コントロールの遅延読み込み、非同期処理が向上します。並列モードでは、ユーザーインターフェースが常にアクティブであり、バックグラウンドでデータを更新し続けることが保証されます。並列モードでは、Reactの2つのフック、
const deferredValue = useDeferredValue(value, { timeoutMs: <何らかの値> }); このコマンドは、 トランジションフックの使用
const [startTransition, isPending] = useTransition({ timeoutMs: 3000 }); <ボタンが無効={isPending} 開始遷移(() => { <フェッチ呼び出し> }); </ボタン> {isPending? " 読み込み中...": null} データ取得のサスペンス
1. データ取得ライブラリと 2. 視覚的な読み込み状態を制御する 3. 競合状態を避ける
'./Spinner' から Spinner をインポートします。 <サスペンスフォールバック={<スピナー />}}> <あるコンポーネント /> </サスペンス> サスペンスと遅延読み込みコンポーネント
同時モードを有効にする 同時実行モードを有効にするには、最新のベータ版をインストールしてください。 React をインストールするための前提条件は、Node Package Manager (npm) です。テストバージョンをインストールするには、次のコマンドを実行します。 npm をインストール react@experimental react-dom@experimental テストビルドがセットアップされていることをテストするには、サンプルの React アプリケーションを作成します。テスト関数なしのレンダリング コードは次のとおりです。 'react' から * を React としてインポートします。 'react-dom' から render をインポートします。 レンダリング(<App />、document.getElementById('root')); 同時実行モードの具体的なコードは次のとおりです。 'react' から * を React としてインポートします。 'react-dom' から createRoot をインポートします。 ルートを作成します(document.getElementById('root'))。レンダリングします(<App />); これにより、アプリケーション全体で同時実行モードが有効になります。 React はレンダリング呼び出しを 2 つの部分に分割します。
現在、React は次の 3 つのモードを維持する予定です。
ブロッキング モードでは、createRoot 呼び出しが createBlockingRoot 呼び出しに置き換えられます。同時開発の場合、ブロッキング モードでは、開発者にバグを修正したり問題を解決したりする機会が提供されます。 React の公式ドキュメントでは、各モードでサポートされている機能についても説明されています。 サンプルアプリケーション:この記事では、同時実行モードやその他のモードの使用方法と効果を確認するためのテスト プログラムも作成します。この記事では、ピクセル アプリケーションを例に、150 x 150 のキャンバスにピクセルをランダムに分散し、検索ボックスを含めます。ユーザーが検索ボックスをクリックするたびに、キャンバスが再レンダリングされます。 ピクセル アプリケーションを構築するためのメイン ファイルは canvas.js です。ユーザーが何でも入力できる入力ボックスも作成しました。キーが押されるたびにピクセル キャンバスが再レンダリングされます。 コード例: Index.js 「react」からReactをインポートします。 「react-dom」からReactDOMをインポートします。 「./App」からAppをインポートします。 // 従来型または非並列モードの反応 定数 rootTraditional = document.getElementById("root"); ReactDOM.render(<App caption="従来のレンダリングまたはブロックレンダリング" />, ルート伝統的); // 同時実行モードが有効 const rootConcurrent = document.getElementById("root-concurrent"); ReactDOM.createRoot(rootConcurrent).render(<App caption="中断可能 レンダリング" />); アプリ React をインポートし、{useState、useDeferredValue} を "react" からインポートします。 「./App.css」をインポートします。 「./Canvas」から { Canvas } をインポートします。 デフォルト関数 App(props) をエクスポートします。 { const [値、setValue] = useState(""); //これは同時実行モードでのみ使用できます。 const deferredValue = useDeferredValue(値、{ タイムアウト時間: 5000 }); 定数keyPressHandler = e => { setValue(e.target.value); }; 戻る ( <div className="アプリ"> <h1>{props.caption}</h1> <input onKeyUp={keyPressHandler} /> <キャンバス値={deferredValue} /> </div> ); } キャンバス 「react」からReactをインポートします。 定数 CANVAS_SIZE = 70; const 生成ランダムカラー = () => { var 文字 = "0123456789ABCDEF"; var color = "#"; (var i = 0; i < 6; i++) の場合 { 色 += 文字[Math.floor(Math.random() * 16)]; } 色を返します。 }; const createCanvas = (行、列) => { 配列 = [] とします。 (i = 0; i < 行; i++) の場合 { 行を[]とします。 (j = 0; j < 列; j++) の場合 { 行をプッシュ(0); } 配列をプッシュします(行); } 配列を返します。 }; //これはピクセルのある正方形です const drawCanvas = 値 => { 定数 キャンバス = createCanvas(CANVAS_SIZE, CANVAS_SIZE); キャンバス.map((行, 行インデックス) => { を返します cellsArrJSX = row.map((cell, cellIndex) => { とします。 キーを rowIndex + "-" + cellIndex とします。 戻る ( <div スタイル={{ backgroundColor: generateRandomColor() }} クラス名="セル" キー={"セル-" + キー} /> ); }); 戻る ( <div キー = {"row-" + rowIndex} クラス名 = "canvas-row"> {セルArrJSX} </div> ); }); }; エクスポートconstCanvas = ({値}) => { 戻る ( <div> <h2 style={{ minHeight: 30 }}>{値}</h2> <div className="canvas">{drawCanvas(値)}</div> </div> ); }; インデックス.html <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="utf-8" /> <メタ name="ビューポート" content="width=デバイス幅、初期スケール=1、縮小してフィット=いいえ" /> <meta name="テーマカラー" content="#000000" /> React アプリの並行モード </head> <本文> <スクリプトなし> このアプリを実行するには、JavaScript を有効にする必要があります。 </noscript> <div id="コンテナ"> <div id="ルート" class="列"></div> <div id="ルート同時" class="列"></div> </div> </本文> </html> 例を実行するコードを見てみましょう。最初に表示される画面はスプラッシュ画面です。従来のブロック レンダリングを使用するのが、React で現在行われている方法です。割り込み可能なレンダリングは、同時実行モードのベータ機能です。まずは従来のレンダリング作業について見てみましょう。 ピクセル キャンバスはキーを押すたびに再レンダリングされます。従来のレンダリングでは、画面を再レンダリングできるようになるまで、キー入力ごとに UI 全体が一時停止します。この間、入力を続けててもユーザー入力は更新されません。 次の画像は、中断可能なレンダリングを示しています。中断可能なレンダリング中、ユーザーは入力を続行できます。キーストロークごとにキャンバスが並行して再レンダリングされている間、UI は停止したり停止したりしません。 再レンダリングが完了すると、React は UI を更新します。静的なスクリーンショットではわかりにくいですが、グリッドが変化しているにもかかわらず、ユーザーは UI の遅延なしに入力できることがわかります。 要約するこの記事では、React と Suspense での並行性のテストについて説明しました。並行モードを使用すると、React.js はユーザー インターフェイスを常に応答性の高い状態に保ちます。アプリケーションのタスクをより小さなチャンクに分割し、ユーザー インターフェイス タスクの優先順位付けを可能にします。したがって、このモードでは、よりスムーズでシームレスなユーザー エクスペリエンスが提供され、アプリケーションの全体的なパフォーマンスが向上します。 同時実行モードと組み合わせることで、サスペンスによりユーザー インターフェイスの応答性を維持できます。同時に、データの取得などの負荷が高く時間のかかるタスクを並行して完了できるため、全体的にシームレスなエクスペリエンスが実現します。 並行モードの詳細については、公式の React ドキュメントをご覧ください。 これで、React 並行性エクスペリエンス - フロントエンド並行モードの登場に関するこの記事は終了です。React 並行性に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)
>>: mysql-8.0.15-winx64はインストールにzipパッケージを使用し、起動後すぐにサービスがシャットダウンされます。
Mysql は人気があり、使いやすいデータベース ソフトウェアです。以下は、mysql の無料インス...
Shtml と asp は似ています。shtml という名前のファイルでは、asp の命令と同様に、...
1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...
ソングティ: SimSun太字: SimHeiマイクロソフト YaHei: マイクロソフト YaHe...
目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...
MySQL 8.0.12 のダウンロードとインストールのチュートリアルを録画し、全員と共有しました。...
効果画像: 1. はじめに独自のアプレットでこのような機能を実装する必要がある1. 核となる考え方ス...
目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...
1. はじめに少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新し...
目次インストール: 1. ファイアウォールの基本的な使い方2. ファイアウォールd-cmdを設定する...
この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...
1. 仮想マシンに共有フォルダを設定します。 1. 処理する仮想マシンを選択し、右クリックして設定...
エラー: Connection to blog0@localhost failed. [08001]...
開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...
voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...