2017-07-14 13 views
1

、私は、次た:Angular4 + Redux:誰がアクションをディスパッチする必要がありますか? (ngrx店舗で)Reduxのを使用して角度4 Appで

APIを呼び出して、アクションをディスパッチサービス

this.contentService.update(this.content).subscribe(data => { 
    //output some success message 
}); 

サービスを呼び出すスマートコンポーネント

update(content: Content) { 
    return this.http.put(`http://someendpoint/contents.json`, { content }) 
    .map((updated_content: Content) => { 
    this.store.dispatch({ type: 'SOME_KEY', payload: updated_content } ); 
    return updated_content; 
    }); 
} 

このアプローチは本当にうまくいっていますが問題ありません。しかし、これが正しいのかどうかは分かりません。コンポーネントがAPIの応答を処理して、ストアにアクションをディスパッチさせる方が良いでしょうか?私はこれを分けるべきですか?長所と短所は何ですか?私はこれについて良い記事を見つけることができません。

答えて

2

個人的には、ロジックをデータ/休憩サービスから分離したいと考えています。

基本的には、これを処理する多くの方法があります。大きなアプリケーションでは、コンポーネント内からサービスを直接呼び出すことさえできませんが、ディスパッチアクションを介して@Effectを介してのみ呼び出します。

「真の1つの方法」は、あなたが定義するアーキテクチャ/スタイルに依存します。一貫性を保ち、すべてのコンポーネント/サービスで新しい方法を導入しないようにしてください。

+0

コメントありがとうございます!私はこのアプローチにして、私のサービスからロジックを分離し、おそらくエフェクトを使用すると思います(アプリケーションは非常に「小さい」から始まりましたので、私はそれを使用すると多くの利点があるとは思わなかったが、それら)。 :-) –

+1

私は同意します、エフェクトはサービスを呼び出す場所です。 –

+0

私が言ったように、_一般的な真のソリューション_はありません - リファクタリングには常にリスクが伴い、ほとんどの場合、かなりの労力が必要です。アプリケーションで作業する唯一の開発者で、50ファイル以下であれば、あなたが迷惑をかける可能性のある他のものを見つけるかもしれない@Effectを使って、それは魔法的に良くなるだろう;-)(クリーナーかもしれないが、それはもっと仕事になるだろう) – olsn

関連する問題