2016-09-13 4 views
0

私の質問は少しダムに聞こえるかもしれませんが、私はまだ反応と還元を学んでいます。 私は私のアプリでuserを持っており、これが私のユーザー状態のスキーマです:ここでreduxの状態で別のエントリを作成せずにサブレデューサーを結合する方法

user : { 
    error, 
    isAuthed, 
    authToken, 
    isFetching, 
    currentRole, 
    roles : ['role', 'role'], 
    paymentsInfo: [{invoice}, {invoice}, {invoice}] 
} 

あるユーザーのための私の私の減速:

function user(state = initialUserState, action) { 
    switch (action.type) { 
    case 'FETCHING_USER': { 
     return { 
      ...state, 
      isFetching : true 
     } 
    } 
    case 'FETCHING_USER_ERROR': { 
     return { 
      ...state, 
      isFetching : false, 
      error  : action.error 
     } 
    } 
    case 'FETCHING_USER_SUCCESS': { 
     return { 
      // update user state 
     } 
    } 
    // payments reducer 
    case 'FETCH_PAYMENT_DETAILS': { 
     return { 
      ...state, 
      payments : payments(state.payments, action) 
     } 
    } 
    case 'FETCH_PAYMENT_SUCCESS': { 
     return { 
      ...state, 
      payments : payments(state.payments, action) 
     } 
    } 
    default: 
     return state 
    } 
} 

私は支払いの異なるファイルに減速し、最後の3例を維持していますuserに減速はpayments減速のアクションにマッチする:

function payments(state = initialPaymentState, action) { 
    switch (action.type) { 
    case 'FETCH_PAYMENT_DETAILS' : { 
     return { 
      ...state, 
      isFetching : true 
     } 
    } 
    case 'FETCH_PAYMENT_ERROR' : { 
     return { 
      ...state, 
      isFetching : false, 
      error  : action.error 
     } 
    } 
    case 'FETCH_PAYMENT_SUCCESS' : { 
     return { 
      ...state, 
      isFetching : false, 
      error  : '', 
      invoices : action.paymentDetails 
     } 
    } 

    default: 
     return state 
    } 
    } 

私は01のための別々の状態を維持しておりませんですが、APIから支払いデータを受け取ったときは、user状態で更新する必要があります。今私の質問は、payments

+0

あなたはどういう意味ですか?それらを一緒に組み合わせますか? –

+0

@ Radio-私は、 'payments'メソッドのケースを' user'リデューサーに書いておきたいと同時に、両方を別々のファイルに入れたいと思います。 'payments'はmainに新しいインスタンスを作成すべきではありません状態ツリーは 'user'の一部でなければなりません(スキーマ参照) –

答えて

0

のための別の状態を作成せずにuserpaymentsレジューサーを一緒に結合する方法です。状態を更新する唯一の方法は、アクションをディスパッチすることです。したがって、支払いを回収した後にアクションをディスパッチし、このアクションを処理するためにユーザー・レデューサーを変更する必要があります。 また、あなたのユーザーレデューサーの行動を捕らえることができるはずです。支払い状態が必要ない場合は、ユーザー還元人のすべての操作を処理します。あなたが結合したい場合は、あなたの状態の部分がReduxのからcombineReducers機能をチェックアウト

0

返すことができ、ユーザのためのあなたのデフォルトの場合{...状態、支払:支払(state.payments、アクション)}

しかし、これはreduxのための反パターンのように見えます、そして、私はあなたがなぜユーザからのcase文を削除したいと思うべきだと思います。それらを持っていることで、コードを読んでいる人々が、それらのアクションがユーザーの状態に影響を与える可能性があることが明らかになります。

関連する問題