2016-02-15 68 views
5

我正在使用redux和reactjs。redux - 如何存儲和更新密鑰/值對

我想存儲簡單的鍵/值對,但無法正確使用reducer語法。

在這種情況下,每個鍵/值對都將保持與外部系統的連接。

這是正確的做法嗎?我在REDX開頭,所以這有點神祕。

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

    default: 
     return state 
    } 
} 

回答

5

我們必須用{},而不是[]而忘記使用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; 

也可能有助於看到它也以這種方式表達。它做同樣的事情,但我認爲它讀取更好一點

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; 

或者,如果你使用Immutable,像這樣

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

當我使用第二個或第三個選項,它表示在編譯時出現「Uncaught ReferenceError:action is not defined」。 –

+0

我忘了在'action'的解構中分配'type'。他們現在應該很好:) – naomik

1

這可能工作

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;