Javascript 使用不可变JS映射时如何设置多个对象值
我是新来的redux,这是正确的方式做redux在下面的代码,请? 当调用action以执行currentTime时,这是一个reducer方法Javascript 使用不可变JS映射时如何设置多个对象值,javascript,reactjs,redux,immutable.js,Javascript,Reactjs,Redux,Immutable.js,我是新来的redux,这是正确的方式做redux在下面的代码,请? 当调用action以执行currentTime时,这是一个reducer方法 import { combineReducers } from 'redux'; import { UPDATE_TIME } from './actions'; import { Map } from 'immutable'; const initialState = Map({update:false, currentTime: ""});
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
我们使用immutable JS在现有对象中的每个小更改上创建新实例。Immutable JS MAP有一个
set
方法来设置属性并返回对象的新实例。
您可以找到地图的api文档
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
查看文档中的最佳实践有多种方法
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);
case UPDATE_TIME:
return state.merge({update: true, currentTime: action.time})
但是,在嵌套状态更新的情况下,您需要执行深度合并。查看的详细信息谢谢您的详细回答,有没有可能通过在状态上重新选择来实现这一点?您所说的
在状态上重新选择是什么意思?据我所知,重新选择是为了拥有可记忆的选择器,我不确定它是否将用于更新redux存储中的不可变状态
case UPDATE_TIME:
return state.merge({update: true, currentTime: action.time})