banner
他山之石

他山之石

理解Redux

Redux の核心思想は、Web アプリケーションが状態マシンであり、ビューと状態が一対一の関係にあるということです。

image

最近 1 年間、私は React 関連の技術スタックを使用してきましたが、Redux の理解にも多大な努力を払ってきました。Redux に関するチュートリアルを書きたいと思っていましたが、ついに始めることができました。

Redux を使用する理由#

Redux は、JavaScript での複雑な状態管理を解決するために登場しました。アプリケーションが大規模になり、複雑なインタラクションシナリオを処理する必要がある場合、Redux を試してみることができます。React を使用している場合、多くのコンポーネントで状態を共有する必要がある場合、非同期処理を処理する必要がある場合、コンポーネントの状態の変更が他のコンポーネントを更新する必要がある場合、Redux が必要になる場合があります。

イントロダクション#

Redux は、予測可能な状態管理を提供する JavaScript の状態コンテナです。

Redux は状態管理に特化しており、React とは切り離されています。

Redux は、次の 3 つの基本原則で説明することができます:

  • 単一の状態ツリー

アプリケーション全体の状態は、オブジェクトツリーに格納され、このオブジェクトツリーは唯一のストアに存在します。

  • 状態は読み取り専用

状態を変更する唯一の方法は、アクションをトリガーすることです。アクションは、発生したイベントを記述するための普通のオブジェクトです。

  • 変更を実行するために純粋な関数を使用する

アクションがどのように状態ツリーを変更するかを説明するために、リデューサーを記述する必要があります。

アクション#

アクションは、本質的には JavaScript の普通のオブジェクトです。Redux では、アクション内で実行するアクションを表すために、文字列型の type フィールドを使用することが規定されています。ほとんどの場合、type は文字列定数として定義されます。アプリケーションの規模が大きくなるにつれて、アクションを格納するために個別のモジュールやファイルを使用することをお勧めします。

Redux では、アクション作成関数の結果を dispatch () メソッドに渡すだけで、ディスパッチプロセスを開始できます。store 内では、store.dispatch () を使用して dispatch () メソッドを直接呼び出すことができます。

リデューサー#

リデューサーは、渡されたアクションと状態に基づいて新しい状態を計算します。

リデューサーは純粋な関数であり、古い状態とアクションを受け取り、新しい状態を返します。
同じパラメータを渡すと、次の状態が必ず同じになります。特別なケースや副作用はありません。API リクエストや変数の変更はありません。純粋な計算のみが実行されます。

  1. リデューサーでは状態を変更せず、新しいオブジェクトを返すようにしてください。Object.assign () を使用して新しいコピーを作成することができます。次のようには使用しないでください:
Object.assign(state, { visibilityFilter: action.filter })

上記のコードは、最初のパラメータの値を変更します。最初のパラメータを空のオブジェクトに設定する必要があります。または、ES7 を有効にしてオブジェクトの展開演算子を使用し、{...state, ...newState} を使用して同じ結果を得ることもできます。
3. default の場合は、古い状態を返してください。未知のアクションに遭遇した場合、必ず古い状態を返す必要があります。

ストア#

ストアはアプリケーションの状態を維持し、アクションを発行するときにリデューサーを呼び出します。
ストアはそれらを結びつけるオブジェクトです。ストアには以下の責任があります:

  • アプリケーションの状態を維持すること;
  • getState () メソッドを提供して状態を取得すること;
  • dispatch (action) メソッドを提供して状態を更新すること;
  • subscribe (listener) を使用してリスナーを登録すること;
  • subscribe (listener) から返される関数を使用してリスナーを解除すること。

Redux アプリケーションには、単一のストアしかありません。データ処理ロジックを分割する必要がある場合は、複数のリデューサーを組み合わせる代わりに、複数のストアを作成するべきではありません。

データフロー#

Redux アプリケーションでのデータのライフサイクルは、次の 4 つのステップに従います:

  1. store.dispatch (action) を呼び出します。

store.dispatch (action) は、コンポーネント、XHR コールバック、タイマーなど、どこからでも呼び出すことができます。

  1. Redux ストアは、渡されたリデューサー関数を呼び出します。

ストアは、現在の状態ツリーとアクションをリデューサーに渡します。

  1. ルートリデューサーは、複数のサブリデューサーの出力を 1 つの単一の状態ツリーにマージする必要があります。

  2. Redux ストアは、ルートリデューサーが返す完全な状態ツリーを保存します。

まとめ#

この記事では、Redux の概念と基本的な紹介について説明しました。次回は、基本的な使い方について紹介します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。