React dva実装コード

React dva実装コード

ドヴァ

dva は、redux と redux-saga をベースにしたデータ フロー ソリューションです。開発エクスペリエンスを簡素化するために、dva には react-router と fetch も組み込まれており、軽量アプリケーション フレームワークに変換できます。

ここに画像の説明を挿入

dvaの使用

ここに画像の説明を挿入

redux-toolkit に少し似たモデルを定義します。
接続を使用する

ここに画像の説明を挿入
ここに画像の説明を挿入

redux の connect のように接続します。

ここに画像の説明を挿入

起動する。
次に、アクションをどのようにディスパッチするかです。

ここに画像の説明を挿入

対応する指示を通じて対応するリデューサーを見つけてディスパッチします。

ここに画像の説明を挿入

これはdvaの基本的な操作であり、比較的簡単に使用できます。

DVAの実装

アイデア: 関数をカプセル化し、ストアを作成し、モデルを通じてリデューサーと状態を収集し、リデューサー内のメソッド名を変更します。

ここに画像の説明を挿入

まず、モデルです。モデルが複数あるため、それらを収集する必要があります。

ここに画像の説明を挿入

まず、namespace を通じて rducer 内のメソッド名を変更します。

ここに画像の説明を挿入

それから保存します。

ここに画像の説明を挿入
ここに画像の説明を挿入

その後、プロバイダーを通じて注入することができます。

ここに画像の説明を挿入

モデルのリデューサーを変換し、redux によって受け入れられたリデューサーを返します。この時点では、モデルの状態は変わりません。これは単なる初期状態です。コンポーネントが実際に受け入れるのは redux 内の状態です。
この getReducer は、実際のリデューサーを返すために 1 回だけ呼び出されます。

ここに画像の説明を挿入

初期実装が完了しました。

非同期をサポート

Dva は redux-saga と統合されているため、使用方法は同様です。

ここに画像の説明を挿入

モデルを作成するときに、エフェクトを通じてサガ ミドルウェアを作成できます。次に対応するアクションをディスパッチします

ここに画像の説明を挿入
ここに画像の説明を挿入

成し遂げる

アイデア: 各モデルのエフェクトを処理し、対応する saga 関数に変換し、takeEvery を使用して各属性名 (asyncADD など、takeEvery('asyncADD', ()=>{}) に変換) をリッスンし、redux-saga が提供する createSagaMiddleware を通じてミドルウェアを作成し、run メソッドを使用して各モデルのエフェクトから変換された saga 関数を実行します。
コード:

ここに画像の説明を挿入

getSagas を使用して各モデルの効果を変換し、配列に保存してから、forEach を通じて 1 つずつ実行します。
変換方法を見る

ここに画像の説明を挿入

図に示すように、各モデルのエフェクトは getSaga で function*(){} に変換され、その後、単一のモデルのエフェクトがトラバースされ、各属性は *asyncADD(){} によって処理されることがわかります。 getWatcher を通じて saga 関数が返され、fork を通じて子プロセスが開始されるため、メインプロセスの動作に干渉することはありません。

ここに画像の説明を挿入

各 getWatcher は、takeEvery を通じて現在の属性 (キー) を監視し、後続の効果を実行する saga 関数 (ジェネレーター関数) を返します。ここで、redux-saga の Put メソッドを変更して、prefixType ロジックを個別に実行するようにする必要があります。
基本的にはこれで完了です。各モデルのエフェクトは saga 関数で処理されて実行され、エフェクトの各メソッドはキーに変換されて takeEvery を通じてリッスンされます。ここでもエフェクトの各メソッド名にプレフィックスを追加する必要があります

ここに画像の説明を挿入

それがやり方です。

ここに画像の説明を挿入

正常に動作できます。

ルーターの実装

ここに画像の説明を挿入
ここに画像の説明を挿入

使用方法に違いはありません
dva は connected-react-router を継承します

ここに画像の説明を挿入
ここに画像の説明を挿入

使い方は似ています。非同期ロジックはエフェクトでのみ記述できることに注意してください。Reducer は同期的であり、ディスパッチを続行することはできません。

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

成し遂げる:

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

connectd-react-router をベースにした

ここに画像の説明を挿入

connectd-react-router の使い方を覚えていますか? 最初のステップは、ルーター オブジェクトを作成することです。

ここに画像の説明を挿入

2 番目のステップはミドルウェアを使用することです。

ここに画像の説明を挿入

パラメータとして API を app._router に渡します。それでおしまい。

ここに画像の説明を挿入

プッシュを送信すると、ルーティング ミドルウェアによってインターセプトされ、処理されて別のページにプッシュされます。

これで react dva 実装に関するこの記事は終了です。さらに関連性の高い react dva 実装コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

<<:  CSS3 すりガラス効果

>>:  メタビューポートはiPhoneでウェブページをフルスクリーン表示コントロールします

推薦する

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

jsでユーザー登録機能を実装する

この記事の例では、ユーザー登録機能を実装するためのjsの具体的なコードを参考までに共有しています。具...

CentOS7.3 での MySQL 8.0.13 のインストールと設定のチュートリアル

1. 基本環境1. オペレーティングシステム: CentOS 7.3 2. MySQL: 8.0.1...

LinuxシステムでFuserコマンドを使用する方法

Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...

MySQLでカーソルトリガーを使用する方法

カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...

Vue3+Vite+TS は、要素プラスビジネスコンポーネントの二次カプセル化を実装します sfasga

目次1. 構造文字列2. タプルを返す3. Dict辞書にアクセスする4. 図書館を利用する5. リ...

Dockerコンテナ接続実装手順の分析

一般的に言えば、コンテナが起動した後、ポート マッピングを通じてコン​​テナが提供するサービスを使用...

mysql5.7.19 解凍版の詳細なインストール チュートリアル (純粋なクラックされた中国語版 SQLYog を使用)

Mysql5.7.19バージョンは今年リリースされた新しいバージョンです。最近のMySQLのバージ...

vue-video-player でのブレークポイント再開の実装

最近のプロジェクトでは、ブレークポイントからビデオの再生を再開する機能を実装する必要がありました。こ...

画像プレビュー付きのアップロードフォームの完全な HTML

画像プレビュー機能付きのアップロードフォーム、完全なHTMLコードは次のとおりです。 <htm...

15行のCSSコードがAppleデバイスをクラッシュさせる可能性があり、最新のiOS 12も例外ではない

たった15行のCSSでiPhoneがクラッシュするWire のセキュリティ研究者 Sabri Had...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

Python の MySQL データベース LIKE 演算子の詳細な説明

LIKE 演算子は、列内の指定されたパターンを検索するため、WHERE 句で使用されます。文法: 列...

vue+echarts で中国地図のフロー効果を実現する (詳細な手順)

@vue+echarts は中国地図のフロー効果を実現します#レンダリングを見てみましょう手順:コ...

要素動的ルーティングブレッドクラムの実装例

マスターするには: localStorage、コンポーネントのカプセル化えーと、GIF に変換したビ...