使用 Immutable JS 映射时如何设置多个对象值

use*_*768 0 javascript reactjs immutable.js redux

我是 redux 的新手,请问这是在以下代码中执行 redux 的正确方法吗?当调用 action 来执行 currentTime 时,这是一个 reducer 方法。

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
Run Code Online (Sandbox Code Playgroud)

Shu*_*tri 7

有多种方法可以做到

  1. 您可以使用set()功能设置值

      case UPDATE_TIME:
         state = state.set('update', true);
         return state.set('currentTime', action.time);
    
    Run Code Online (Sandbox Code Playgroud)

    甚至

     case UPDATE_TIME:
         return state.set('update', true)
                     .set('currentTime', action.time);
    
    Run Code Online (Sandbox Code Playgroud)

但是,当您有多个更改时,这是不可行的

  1. 另一种选择是 merge()

    case UPDATE_TIME:
       return state.merge({update: true, currentTime: action.time})
    
    Run Code Online (Sandbox Code Playgroud)

但是,在嵌套状态更新的情况下,您需要执行 deepMerge。查看详情mergeDeep