1 つの記事で React における Redux の初期の使用を理解する

1 つの記事で React における Redux の初期の使用を理解する

Redux はデータ状態管理プラグインです。React や Vue を使用してコンポーネント化された SPA プログラムを開発する場合、コンポーネント間での情報共有は非常に大きな問題となります。例えば、ユーザーがログインすると、クライアントはユーザー情報(ID、アバターなど)を保存し、システムの多くのコンポーネントがこの情報を使用します。この情報を使用する際に、毎回再度取得するのは非常に面倒です。そのため、各システムには、複数のコンポーネントで使用される共通情報を管理する機能が必要です。これがreduxの役割です。

これまで redux に触れたことがない開発者の方は、ぜひじっくりとご覧いただければと思います。私も多くのブログに期待して、自分でもゆっくりまとめています! ! ! !大物が一つずつ探すよりはいいです。

'react' から React、{ Component、Fragment } をインポートします。

//クラスをインポートimport { connect } from 'react-redux';

//フック import { useSelector, useDispatch } from 'react-redux'

'../../redux/actions/count' から { add, clear } をインポートします。


//表示コンポーネントをフックする const CountItem = (props) => {
    // const を分解する {
        カウント、
        フラグ、
        追加、
        クリア
    } = 小道具
    戻る (
        <>
            <h2>現在の合計: {count}</h2>
            <h3>現在のフラグ: {flag ? 'true' : 'false'}</h3>
            <button onClick={add}>+1 をクリック</button>
            <button onClick={clear}>クリア</button>
        </>
    )
}

// コンテナコンポーネントをフックする const Count = () => {
    定数 count = useSelector(state => state.sum)
    const flag = useSelector(state => state.flag)
    定数ディスパッチ = useDispatch()

    定数countAdd = () => {
        コンソールログ(追加.タイプ)
        ディスパッチ(追加(1))
    }

    定数clearNum = () => {
        ディスパッチ(クリア())
    }

    戻り値: <CountItem count={count} flag={flag} add={countAdd} clear={clearNum} />
}

エクスポートのデフォルト数



// クラス表示コンポーネント // クラス Count は Component を拡張します {
// 追加 = () => {
// // 通知の再実行
// this.props.add(1);
// };
// クリア = () => {
// this.props.clear();
// };
// 与える() {
// 戻る (
// <フラグメント>
// <h2>現在の合計は: {this.props.count}</h2>
// <h3>現在のフラグ: {this.props.flag ? 'true' : 'false'}</h3>
// <button onClick={this.add}>+1 をクリック</button>
// <button onClick={this.clear}>クリア</button>
// </フラグメント>
// );
// }
// }

// クラスコンテナコンポーネント // デフォルトのエクスポート connect(
// // 1. 状態 // state => ({ count: state.sum, flag: state.flagState }),
// // 2. メソッド // { add, clear }
// )(カウント);

基本的な使い方は、ほぼこのようになります。on hook で使用する主要なメソッドは、useSelector で redux の状態を使用し、dispatch で Reduce を呼び出すことです。クラス コンポーネントでは、connect を使用して状態とメソッド (reduce) を関連付けます。

ここでの難しさは、reduceとstateにあります

ここでのreduceとは何ですか?

上記のコードでは、add メソッドと clear メソッドを使用しました。これらの 2 つのメソッドを実装するには、新しい js ファイルを作成します。

// Count コンポーネントのアクション オブジェクトを作成します // 定数をインポートします import { ADD, CLEAR } from '../constant';

// アクションオブジェクトを追加する関数を作成する export const add = data => ({
    タイプ: ADD、
    データ、
});

// アクションオブジェクトをクリアする関数を作成する export const clear = data => ({
    タイプ: クリア、
    データ、
});

上記には定数があります。これは、actionType の統一管理を容易にするためのものです。対応するアクション オブジェクトを作成すると、コードをモジュール化するのに役立ちます。
それを貼り付けてconstant.jsを作成し、

エクスポート const ADD = 'add';
エクスポートconst CLEAR = 'clear';

この時点でアクション オブジェクトはほぼ定義されており、リデューサーを管理する必要があります。つまり、ディスパッチは上記のアクションオブジェクトを配布して状態の更新を実装する。

リデューサーフォルダではcount.jsを定義します

// Countコンポーネントのリデューサーを作成する
// リデューサーは2つのパラメータを受け取ります: 前の状態のpreState、アクションオブジェクトのアクション

'../constant.js' から {ADD、CLEAR} をインポートします。

// 初期状態を設定します。const initState = 0;

デフォルトの関数 addReducer(preState = initState, action) をエクスポートします。
    // アクションから型とデータを取得する
    const { 型、データ } = アクション;
    //型に基づいてデータの処理方法を決定する switch (type) {
        ケース追加:
            preState + データを返します。
        ケースクリア:
            0を返します。
        // 初期化アクションのデフォルト:
            preState を返します。
    }
}

上記のメソッドは、型分布を呼び出すためにディスパッチを使用する必要があります(強調追加)

これで使い方は完了です。次に、reactプロジェクトにreduxを設定しましょう。

ここで逆の順序で語るのは意味がないので、必要ありません。
主な設定は次のとおりです
store.js の設定とグローバルストアの使用

ストアの世界的な利用状況の初見
ルート ルートの下にプロバイダーを使用して App をラップします。

'react' から React をインポートします。
'react-dom' から ReactDOM をインポートします。
'./App.jsx' からアプリをインポートします。
'./redux/store' から store をインポートします。
'react-redux' から { プロバイダー } をインポートします。

ReactDOM.render() は、
    // プロバイダはAppをラップします。目的: Appのすべての子孫コンテナコンポーネントがストアを受け取ることを可能にします
    <プロバイダーストア={store}>
        <アプリ />
    </プロバイダー>,
    ドキュメント.getElementById('ルート')
);

ここにredux/store.jsがあります。コードを参照してください

// ドキュメント全体にはストア オブジェクトが 1 つだけあります。createStore は 2 つのパラメータを受け取ります。1 つ目は状態ツリー、2 つ目は処理されるアクションです。
//applyMiddleware はすべてのミドルウェアを配列に集約し、それらを順番に実行して、非同期的に処理します。import { createStore, applyMiddleware } from 'redux';
//ミドルウェアimport thunk from 'redux-thunk';
//すべてのリデューサーを要約する
'./reducers/index' から allReducers をインポートします。
//Google のデバッグ ツールの具体的な使用方法は次のとおりです: Baidu import { composeWithDevTools } from 'redux-devtools-extension';

// ストアを公開する
デフォルトのcreateStore(allReducers、composeWithDevTools(applyMiddleware(thunk)))をエクスポートします。

この記事はこれで終わりです。まだ、この記事の実行プロセスと原則の一部が理解できていません。今後もさらに理解を深め、学習する必要があります。

上記は、React で redux を使用する方法に関するこの記事の詳細な内容です。React で redux を使用する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • react-redux における connect の使い方と原理分析の詳細な説明
  • JavaScript 状態コンテナ Redux の詳細な説明
  • reduxの動作原理と使い方の説明

<<:  自作の Windows サーバーに egg アプリケーションを展開する方法 (画像とテキスト付き)

>>:  Windows サーバー ポートを開きます (例としてポート 8080 を使用します)

推薦する

mysql 8.0.16 winx64 および Linux でルート ユーザーのパスワードを変更する方法

データベースへの接続などの基本的な操作はご自身で行ってください。この記事ではパスワードの変更方法を中...

docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル

macにbrewを使ってphp56をインストールしたところ、 opensslがバージョン1.1だった...

JSの基本概念の詳細な紹介

目次1. JSの特徴1.1 マルチパラダイム1.2 説明1.3 シングルスレッド1.4 ノンブロッキ...

大規模なウェブサイトアーキテクチャを設計・構築する際に考慮すべき10の課題

ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

レスポンシブレイアウトについて知っておくべきこと

1. はじめにレスポンシブ Web デザインにより、Web サイトは複数のデバイスと複数の画面に同時...

CSS の ::before と ::after 疑似要素について知らないこと

CSS には、一般的には使用されない 2 つの疑似クラス、before と :after があります...

jQueryはアコーディオンの小さなケースを実装します

この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...

Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)

Nginxのproxy_cacheを使用してキャッシュサーバーを構築する1: ngx_cache_...

Linux仮想マシンの静的IPアドレスを構成するための手順を完了します

序文多くの場合、仮想マシンを使用します。たとえば、一部のテストは検出されません。何かを壊すことを心配...

RedisとMemcacheの比較と選び方

最近 redis を使っていて、とても便利だと感じているのですが、インメモリ データベースを選択する...

MyBatisインターセプターのページング機能を実装する方法

MyBatisインターセプターのページング機能を実装する方法序文:まず、実装原則についてお話しします...

React における ref の一般的な使用法の概要

目次Refsとは何か1. 文字列型参照2. コールバック参照React.createRef() 4....

MySQL における ${param} と #{param} の違い

${param}によって渡されるパラメータは、テーブル名やフィールド名を渡すなど、SQL文の一部と...

JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)

序文1. この記事ではMySQL 8.0バージョンを使用していますバージョン5.0と比較すると、パッ...