2017-09-04 34 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