2016-11-24 3 views
1

Ich habe folgendes Minderer:Wie ID zum Array in Redux speichern hinzufügen?

const initialState = { 
    items: [], 
    cartOpen: false, 
    total: 0 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 
      return [...state.items,action.payload] 

     default: 
      return state 
    } 
} 

Der Versuch, eine Aktion wie diese versenden:

store.dispatch({type: 'ADD_TO_CART', payload: 22}); 

Wie kann ich die Nutzlast schieben, die eine ID Element-Array ist?

Antwort

0

Ihre Minderer gibt ein Array kein Objekt ein Objekt zurückzukehren, ohne den Zustand Verwendung mutiert Object.assign oder die spread operator ... Ihr Code sollte wie folgt aussehen.

const initialState = { 
    items: [], 
    cartOpen: false, 
    total: 0 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 
      return Object.assign({} , state, { 
       items : [...state.items,action.payload] 
      }) 

     default: 
      return state 
    } 
} 

stellen Sie sicher, eine pollyfill, wenn Ihr Ziel-Browser Object.assign oder Sie könnten die Ausbreitung Operator nicht unterstützt verwenden, die ich denke, ein pollyfill

const initialState = { 
    items: [], 
    cartOpen: false, 
    total: 0 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
    case 'ADD_TO_CART': 
    return { ...state, { 
     items : [...state.items , action.payload] 
    }) 
    default: 
     return state 
    } 
} 
+0

Der object.assign Schnipsel funktioniert für mich aber nicht die Ausbreitung einer ? –

+1

Nein, Sie sollten ein Array nicht direkt zurückgeben. Verwenden Sie 'return {... state, items: [... state.items, action.payload]}' '. @aeid Du hast in deinem Beispiel eine Stufe (Tippfehler) hinzugefügt. –

+0

Das gibt einen Fehler zurück: index.js: 9 Uncaught Error: Kann das Modul "./cart"(...) nicht finden. cart.js enthält den Cartreducer. –

0

Sie machen es nicht erforderlich ist Verwenden Sie die Bibliothek immutability-helper, um Änderungen an Ihrem Status vorzunehmen. Ein zusätzlicher Vorteil ist, dass es wird es Ihnen leicht machen, Änderungen an das tief verschachtelte Objekt in Ihrem Staat zu machen leicht

import update from 'immutability-helper'; 
const initialState = { 
    items: [], 
    cartOpen: false, 
    total: 0 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 
      return update(state, { 
       items: { 
        $push: action.payload 
       } 
      }) 

     default: 
      return state 
    } 
} 

Docs