2017-07-18 4 views
0

私はすべてのレデューサーによって実行されるすべてのアクション文字列のログを維持できる方法を考えていました。第1に、このログはアプリケーションの外部に存在し、状態で後方に進むのに使用されるべきではないので、この関数はreduxの読み取り専用状態を破る可能性があります。彼らは注射可能でシングルトンなので、サービスはこれには理想的だと思いました。どのように私の減速機にサービスを注入するか、何とかアクション文字列を配列に保存するつもりですか?Angular 2 @ ngrx/reduxすべての文字列(アクション)を保存してログを作成する

ここに私のnavの減速機の例があります:これにサービスをどのように注入すればよいですか?

import * as Layout from '../_actions/layout.actions'; 

export interface State 
{ 
    sideNavVisualState: boolean; 
    sideNavWidthPx: number; 
    sideNavMarginLeftPx: number; 
} 

const initialState: State = { 
    sideNavVisualState: false, 
    sideNavMarginLeftPx: 0, 
    sideNavWidthPx: 0 
}; 

export function reducer(state = initialState, action: Layout.Actions): State 
{ 
    switch (action.type) 
    { 
     case Layout.OPEN_NAV: 
      return { 
       sideNavVisualState: true, 
       sideNavWidthPx: 250, 
       sideNavMarginLeftPx: 250 
      } as State; 
     case Layout.CLOSE_NAV: 
      return { 
       sideNavVisualState: false, 
       sideNavWidthPx: 0, 
       sideNavMarginLeftPx: 0 
      } as State; 
     default: 
      return state;  
    } 
} 

export const getSideNav = (state: State) => state; 

答えて

0

あなたは減速中に何かを注入することはできませんが、何を行うことができますすることは以下の通りです:

  1. に登録
  2. import {Actions} from "@ngrx/effects";)ngrxから注入するActionsロギングサービス
  3. を作成します。 Actionsを入力し、任意の場所にログ(またはtype)を入力してください。

したがって、このような何か:

import {Actions} from "@ngrx/effects"; 
// ...other imports 

@Injectable() 
export class YourLoggerService { 
    public logAllActions$ = this.actions$ 
     .map(action => action.type) 
     .do(actionType => /* ...some logging logic... */); 

    constructor(private actions$: Actions) { 
     this.logAllActions$.subscribe(); 
    } 
} 
0

すでに設計であること、あなたを与えるngrx。あなたは、純粋な機能変化状態(減速器)のそばであなたの行動が派遣されたときに何か他のことが起こりたいですか?

エフェクトで同じアクションを購読してログに記録するのはなぜですか?

[UPDATE]

そして、もちろん、射出その逆の操作を行います。代わりに、サービスにアクションを注入する(あなたがそのように、新しいエフェクトの実装をしようとするだろうか?) - なぜログサービスを注入しません効果に?

[UPDATE]

ngrxストアは、次のように動作します。

  1. あなたは彼らが副作用を作成していない、純粋な関数ですレデューサー、意味を持っています。彼らが行うことは、状態を更新することだけです。 (特にChangeDetectionStrategy.OnPushとImmutablesをストーリーに混ぜると、「更新」という言葉を塩の塊とみなしてください)。減速機は、状態を変えるべき行動にのみ加入する。たとえば、Load_Something_From_Server_FINISHED(つまり、サーバーからの応答があります)。そのアクションのペイロード内では、サーバーからのデータを取得する必要があります。これは、リデューサーが状態を更新するものです。

  2. ます。また、アクションだけで、副作用、例えば、AJAXリクエストで何かを開始するものについて聞く副作用を持っています。したがって、エフェクトはLoad_Something_From_Server_STARTREQUESTのようなアクションを受け取ります(ここでは、エフェクトから実際のHTTPリクエストを送信するサービスを呼び出します)。レスポンスが返ってくると、サーバーからのデータ(アクションペイロードで送信されたデータ)でLoad_Something_From_Server_FINISHEDアクション(リデューサがリッスンする)を送出します。

  3. ロギングについて考えるとき、デフォルトでその副作用があります。だから、何らかのアクションが派遣され、減速機がそれに反応したとき(更新された状態)にはいつでも、それをどこかに保存したいと思う。状態を更新するための減速機、副作用の影響など、あなたがそれらが意味するもののためにそれらを使用する限り、効果と減速剤の両方が同じ行動を聞くことを妨げるものはありません。

これは、あなたの行動が送出されたときに、あなたの減速は、ログインするために保存する状態と、あなたの効果を更新することに耳を傾けなければならない、を意味します。

+0

私は効果を一度も使用していないし、Reduxの使い方も比較的新しいです。本当に基本的な例を表示できますか? –

+0

私は数ヶ月前と全く同じ状況にいました。私はnrgxの概念で完全に失われました。私に最も助けになったのは全体的な全体像でした。その理由から、私はコードを投稿しません、ネット上の例をたくさん見つけるでしょう。代わりに、私は全体の画像についてもう少し説明をしようとします。それが助けてくれることを願って。 (私は私の答えを更新しました) –

関連する問題