2017-09-04 17 views
0

我是redux的新手,請問下面的代碼是否正確地使用了redux? 當調用執行currentTime的動作時,這是一個reducer方法。如何在使用Immutable JS映射時設置多個對象值

import { combineReducers } from 'redux'; 
import { UPDATE_TIME } from './actions'; 
import { Map } from 'immutable'; 

const initialState = Map({update:false, currentTime: ""}); 

function currentTime(state = initialState, action) { 
    switch (action.type) { 
    case UPDATE_TIME: 
     return {...state, update: true, currentTime: action.time }; 
    default: 
     return state; 
    } 
} 

const currentTimeReducer = combineReducers({ 
    currentTime 
}); 

export default currentTimeReducer 

回答

1

有多種方式做到這一點

  1. 您可以設置使用set()函數值

    case UPDATE_TIME: 
        state = state.set('update', true); 
        return state.set('currentTime', action.time); 
    

    甚至

    case UPDATE_TIME: 
        return state.set('update', true) 
           .set('currentTime', action.time); 
    

然而,這不是可行的情況下有多個變化

  • 另一種選擇是merge()

    case UPDATE_TIME: 
        return state.merge({update: true, currentTime: action.time}) 
    
  • 但是在嵌套狀態更新的情況下,您需要執行deepMerge。查看的詳細信息mergeDeep

    +0

    感謝您的詳細解答,有沒有可能通過重新選擇狀態來做到這一點? – user2235768

    +0

    你是什麼意思'重新選擇狀態' –

    +0

    http://blog.rangle.io/react-and-redux-performance-with-reselect/ – user2235768

    0

    我們使用不可變的JS在現有對象的每個小改動上創建新實例。 Immutable JS MAP有一個set方法來設置屬性並返回對象的新實例。 Here你可以找到API文檔的MAP

    import { combineReducers } from 'redux'; 
        import { UPDATE_TIME } from './actions'; 
        import { Map } from 'immutable'; 
    
        const initialState = Map({update:false, currentTime: ""}); 
    
        function currentTime(state = initialState, action) { 
         switch (action.type) { 
         case UPDATE_TIME: 
          let newState = state; 
          newState = newState.set('update', true); 
          newState = newState.set('currentTime', action.time); 
          return newState; 
         default: 
          return state; 
         } 
        } 
    
        const currentTimeReducer = combineReducers({ 
         currentTime 
        }); 
    
        export default currentTimeReducer 
    

    尋找最佳做法this DOC

    相關問題