2016-09-13 3 views
0

zu erstellen meine Frage mag ein bisschen dumm klingen, ich lerne immer noch reagieren und redux. Ich habe user in meiner app und das ist Schema meines Benutzerstatus:Wie Sub-Reducer zu kombinieren, ohne separaten Eintrag im Zustand in redux

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

Hier ist mein mein Minderer für Benutzer:

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 
    } 
} 

Ich Zahlungen Minderer in verschiedenen Datei und letzten 3 Fälle beibehalten in user Spiele Minderer zum Handeln von payments Minderer:

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 
    } 
    } 

ich bin nicht getrennten Zustand für 01 Aufrechterhaltung, aber wenn ich Zahlungsdaten von API erhalte, muss ich das in user Zustand aktualisieren. Nun meine Frage ist, dass ist es eine Möglichkeit, user und payments Reduzierungen miteinander zu kombinieren, ohne eigenen Staat zu schaffen für payments

+0

Was meinst du - kombinieren sie zusammen? –

+0

@ Radio- mit kombinieren Ich meinte, dass ich nicht die Fälle der 'payments' Methode in 'user' Reducer schreiben will und gleichzeitig möchte ich beide in separaten Dateien und' payments' sollte keine neue Instanz in main erstellen State Tree ist Teil von 'user' (siehe Schema) –

Antwort

0

Den einzigen Weg, um den Zustand zu aktualisieren, um eine Aktion zu versenden. Sie sollten also eine Aktion versenden, nachdem Sie die Zahlung abgerufen haben, und den Benutzerreduzierer ändern, um diese Aktion zu bearbeiten. Auch sollte in der Lage sein, jede Aktion in Ihrem Benutzer Reducer zu fangen. Wenn Sie keinen Zahlungsstatus benötigen, behandeln Sie alle Aktionen im Benutzerreduzierer. Wenn Sie Teile Ihres Staates verbinden möchten überprüfen combineReducers Funktion von redux

0

Ihr Standardfall für Benutzer zurückkehren könnte {... Zustand, die Zahlungen: (state.payments, action)}

Dies sieht jedoch wie ein Anti-Pattern für Redux aus, und ich denke, Sie sollten überlegen, warum Sie die Case-Anweisungen vom Benutzer entfernen möchten. Sie dort zu haben, macht es für Leute, die den Code lesen, offensichtlich, dass diese Aktionen den Benutzerstatus beeinflussen können.

Verwandte Themen