私は、角度プロジェクトにngrxを追加しようとしています。私はまだサービスが必要かどうかはわかりません。コンポーネントはアクションをディスパッチできるためです。これは、ngrx/store以外のサービスを使用する必要はないということですか?ngrx/storeとエフェクトを使用する場合のサービスの使用方法は?
0
A
答えて
1
私はまだ論理をカプセル化するためにサービスを使用します。一般に、コンポーネントはサービスと通信し、サービスはストアと通信します。
私は、サービスが単に格納するだけではないということの範囲を発見しました。そのため、サービスを削除すると、ストアコンポーネントにビジネスロジックが多すぎます。私の店は、このパターンでは
static INITIALIZE_CONFIG_REQUEST = 'INITIALIZE_CONFIG_REQUEST';
static INITIALIZE_CONFIG_SUCCESS = 'INITIALIZE_CONFIG_SUCCESS';
static INITIALIZE_CONFIG_FAILED = 'INITIALIZE_CONFIG_FAILED';
static INITIALIZE_CONFIG_TEMPLATE_ERROR = 'INITIALIZE_CONFIG_TEMPLATE_ERROR';
createInitializeConfigRequest() { // separate from invoking call for easier testing
return {
type: ConfigActions.INITIALIZE_CONFIG_REQUEST,
httpRequest: {
url: 'api/path/to/config',
successAction: this.createInitializeConfigSuccess,
failedAction: this.createInitializeConfigFailed,
validateResponse: (data) => this.checkTemplate(data)
}
};
}
initializeConfigRequest() { // called by config.service
this.store.dispatch(this.createInitializeConfigRequest());
}
createInitializeConfigSuccess(data) {
const payload = data;
return {
type: ConfigActions.INITIALIZE_CONFIG_SUCCESS,
payload
};
}
createInitializeConfigFailed(error) {
return {
type: ConfigActions.INITIALIZE_CONFIG_FAILED,
payload: {
error
}
};
}
例えば、短いし、テストしやすいシンプルなAPIのような行動に焦点を当てている
、私はより簡単に、このようなことがHttpRequestをし、上記のレスポンスの検証を処理するようミドルウェアを追加することができます。
ほとんどの削減は、ペイロードプロパティがストアプロパティに正確に対応すると仮定する単一の汎用レデューサを介して行われます。これは私の好きな大会です。なぜなら、n個の減速材のn回の繰り返しテストの代わりに、一般的な減速材の包括的なテストが1セット用意されているからです。
genericActionHandler(state, action) {
if (!action.payload) {
return state;
}
const newState = {...state};
Object.assign(newState, action.payload);
return newState;
}
私のアーキテクチャに対する感触を与える希望。
関連する問題
- 1. "!important"を使用する場合のremoveClass()の使用方法は?
- 2. Webサービスを使用する場合、ページメソッド?
- 3. レンダリングステータスのテスト方法:rescue_fromを使用している場合、Rails4とRSpecを使用した場合は
- 4. kivyの場合の使用方法?
- 5. Swift - letの場合の使用方法
- 6. 行データテーブルの場合の使用方法
- 7. バインディングソースを使用する場合のパラメータ値のトリミング方法は?
- 8. Caliperを使用する場合のコマンドラインの指定方法は?
- 9. JavaScriptのエフェクトを使用してページをスクラップする方法
- 10. SQL Serverを使用している場合のcase節の使用方法は?
- 11. JQueryを使用してWCFサービスを使用する場合のmaxJsonLength
- 12. プロジェクトで複数のターゲットを使用する場合のファブリックの使用方法
- 13. ScalaJ-Httpを使用する場合のユニットテスト方法は?
- 14. Vue CDNを使用する場合のmapGettersの使い方は?
- 15. マーカーを使用する場合の使用方法クラスタでのアルゴリズム
- 16. 端末でSBCL&Clozure CLを使用する場合のキーバインディングの使用方法
- 17. 新しいPIXI.particles.ParticleContainer()を使用する場合のPIXI.Graphicの使用方法
- 18. $ thisを使用する場合とシンプルな変数を使用する場合
- 19. jQueryエフェクトを使用するには
- 20. SimpleJdbcCallを使用する場合、結果セットへのアクセス方法またはrowcallbackhandlerを使用する方法
- 21. NoClassDefFoundError:com.google.gson.GsonBuilderマイクロソフトの紺碧でgoogle playサービスを使用する場合
- 22. 角度1.x:特定のシナリオコントローラ/サービスを使用する場合
- 23. WCFサービス用にXmlSerializerFormatを使用する場合、ラッピングを回避する方法はありますか?
- 24. SonarQube Webサービスでの結合演算子の使用方法は?
- 25. コアグラフィックスを使用してアニメーションやエフェクトをレンダリングする方法
- 26. 工場、サービス、プロバイダーの使用
- 27. ヘッダーファイルとcppファイルを使用する場合の構造の定義方法は?
- 28. コンテンツプロバイダを使用する場合のGROUP BYの方法
- 29. NLsolve、Juliaを使用する場合のイニシャルの設定方法
- 30. Hoconを使用する場合のHashMappingの指定方法
サービスはまだ使用できますが、本当に必要はありません。アクションをディスパッチするときは、サービスメソッドを呼び出すのではなく、 '@ ngrx/store'にメッセージを送ります。 – pixelbits