Javascript swtich case sentece和ojbect之间的差异包含Redux减速器功能中的函数

Javascript swtich case sentece和ojbect之间的差异包含Redux减速器功能中的函数,javascript,redux,Javascript,Redux,我基于此编写了一个代码。(这是用韩语写的) 本教程的目标是使用vanilla JS和Redux制作一个计数器和灯泡 下面是原始codesandbox和reducer函数的示例 函数缩减器(状态=初始状态,动作){ 开关(动作类型){ 外壳拨动开关: 返回{ ……国家, 灯光:!state.light }; 案例增量: 返回{ ……国家, 计数器:state.counter+action.diff }; 案件减量: 返回{ ……国家, 计数器:state.counter-1 }; 违约: 返回状态

我基于此编写了一个代码。(这是用韩语写的)

本教程的目标是使用vanilla JS和Redux制作一个计数器和灯泡

下面是原始codesandbox和
reducer
函数的示例

函数缩减器(状态=初始状态,动作){
开关(动作类型){
外壳拨动开关:
返回{
……国家,
灯光:!state.light
};
案例增量:
返回{
……国家,
计数器:state.counter+action.diff
};
案件减量:
返回{
……国家,
计数器:state.counter-1
};
违约:
返回状态;
}
}
我不喜欢开关盒这句话,所以我把它改了一点。这是一个

const reducer=(state=initialState,action)=>{
常量任务={
切换开关(状态、动作){
返回{
……国家,
灯光:!state.light,
};
},
增量(状态、动作){
返回{
……国家,
计数器:state.counter+action.diff,
};
},
减量(状态、动作){
返回{
……国家,
计数器:state.counter-1,
};
},
};
if(tasks.hasOwnProperty(action.type))tasks[action.type](状态,动作);
else返回状态;
};
我认为这些函数的工作方式是相同的,但是在使用
store.getState()
时,第二个代码返回类型错误


这两个函数的工作原理有什么区别?

您缺少了一个
返回
关键字:

    if (tasks.hasOwnProperty(action.type))
        return tasks[action.type](state, action);
    else
        return state;

我看不出第二个代码是如何更好,您的代码比以前多,而且不知何故可读性较差。但是,为了回答您的问题,您在
if(tasks.hasOwnProperty(action.type))返回任务[action.type](state,action)中遗漏了
return
语句
FWIW,我也不喜欢reducer中的switch语句——但没有理由将这些函数放在reducer本身中;它们可以单独存在,并在减速器内引用。然后,简化程序就是查找和执行。