2016-04-01 8 views
4

Redux docs vorschlagen normalizr mit der Form des Staates so gestalten:Können Sie mit combineReducers Deep State Reducer erstellen?

{ 
    entities: { 
    cards: { 
     42: { 
     id: 42, 
     text: 'Hello', 
     category: 2 
     }, 
     43: { 
     id: 53, 
     text: 'There?', 
     category: 1 
     }, 
    } 
    categories: { 
     1: { 
     id: 1, 
     name: 'Questions' 
     } 
     2: { 
     id: 2, 
     name: 'Greetings' 
     }, 
    } 
    }, 
    filter: 'SHOW_ALL', 
    allCardsList: { 
    isFetching: false, 
    items: [ 42, 43 ] 
    }, 
} 

Natürlich ist dies in drei zusammensetzbare Reduzierungen aufgeteilt würde (filter, allThingsList und entities), aber es scheint mir, dass ich würde Ich möchte separate Reduzierungen für entities.cards und entities.categories schreiben.

Gibt es eine Möglichkeit Verwaltung von Entitäten in subreducers zu spalten, die Zusammensetzung wie dies erlauben würde:

let rootReducer = combineReducers({ 
    entities: { 
     things, 
     categories 
    }, 
    filter, 
    allCardsList 
}); 

Gibt es irgendwelche Vorteile zu halten auf der Root-Ebene die cards und categories in entities, statt zu halten (was ermöglicht die Zusammensetzung mit combineReducers)?

{ 
    cards: { ... }, 
    categories: { ... }, 
    filter: 'SHOW_ALL', 
    allCardsList: { ... } 
} 

Antwort

6

Gibt es eine Möglichkeit Verwaltung von Entitäten in subreducers zu spalten, die Zusammensetzung wie dies ermöglichen würde?

Sicher! combineReducers() gibt dir nur einen Druckminderer, damit Sie es mehrmals verwenden können:

let rootReducer = combineReducers({ 
    entities: combineReducers({ 
     things, 
     categories 
    }), 
    filter, 
    allCardsList 
}); 

Der shopping-cart example in Redux repo demonstriert diesen Ansatz.

Gibt es Vorteile, die Karten und Kategorien in Entitäten zu behalten, anstatt auf der root-Ebene zu bleiben?

Es liegt an Ihnen, aber ich finde die Struktur, die Sie vorschlagen einfacher zu arbeiten. Es ist in der Tat einfacher zu verstehen, alle Entitäten unter einem einzigen Schlüssel zu gruppieren, und es ist möglich mit combineReducers(), wie ich oben zeige.

+0

Scheint jetzt offensichtlich, wenn ich an die Implementierung von 'MähdrescherReducers' denke. Vielen Dank! – c10b10

Verwandte Themen