2016-02-15 4 views
5

Używam redux wth reactjs.redux - jak przechowywać i aktualizować parę klucz/wartość

Chcę przechowywać proste pary klucz/wartość, ale nie mogę uzyskać prawidłowej składni reduktora.

W tym przypadku każda para klucz/wartość będzie utrzymywać połączenie z systemem zewnętrznym.

Czy to właściwy sposób? Jestem na początku z redux, więc to trochę tajemnica.

export default (state = {}, action) => { 
    switch(action.type) { 
    case 'addConnection': 
     return { 
     connections: { 
      ...state.connections, { 
      action.compositeKey: action.connection 
     } 
     } 

    default: 
     return state 
    } 
} 

Odpowiedz

5

Wystarczy mieć kilka błędów z {} zamiast [] i zapominając używać Object.assign.

const reducer = (state = {}, action) => { 
    switch (action.type) { 
    case 'addConnection': 
     return Object.assign({}, state, { 
     connections: [ 
      ...state.connections, 
      { 
      [actions.compositeKey]: action.connection 
      } 
     ] 
     }); 
    default: 
     return state; 
    } 
} 

export default reducer; 

Może to pomóc w wyrażeniu tego w ten sposób. To nie to samo, ale myślę, że to brzmi trochę ładniejszy

const reducer = (state = {}, {type, compositeKey, connection}) => { 
    switch (type) { 
    case 'addConnection': 
     return Object.assign({}, state, { 
     connections: state.connections.concat({ 
      [compositeKey]: connection 
     }) 
     }); 
    default: 
     return state; 
    } 
} 

export default reducer; 

Lub jeśli używasz Immutable, coś takiego

import Immutable from 'immutable'; 

const reducer = (state = Immutable.Map(), {type, compositeKey, connection}) => { 
    switch (type) { 
    case 'addConnection': 
     return state.set(
     'connections', 
     state.get('connections').concat({ 
      [compositeKey]: connection 
     }) 
    ); 
    default: 
     return state; 
    } 
} 

export default reducer; 
+0

Gdy używam Druga lub trzecia opcja, którą przedstawiasz, mówi "Uncaught ReferenceError: action is not defined" na kompilacji. –

+0

Zapomniałem przypisać 'type' w destructuring' action'. Powinny być teraz dobre :) – naomik

1

może działać

const reducer = (state = {}, {type, compositeKey, connection}) => { 
    switch (type) { 
    case 'addConnection': 
     var newData={}; 
     newData[compositeKey]=connection; 
     return Object.assign({}, state, newData) 
     }); 
    default: 
     return state; 
    } 
} 

export default reducer;