Redux-在reducer中使用动作对象方法,而不是开关

Redux-在reducer中使用动作对象方法,而不是开关,redux,reducers,Redux,Reducers,我是redux新手,研究了redux操作或在reducer中使用switch语句,虽然我不反对使用switch语句,但我想知道,仅仅使用调用action方法不是更容易吗 我是这么想的 import actions from './actions' const reducer = (state = {}, action) => { if (actions[action.type]) return Object.assign({}, state, actions[acti

我是redux新手,研究了redux操作或在reducer中使用switch语句,虽然我不反对使用switch语句,但我想知道,仅仅使用调用action方法不是更容易吗

我是这么想的

import actions from './actions'

const reducer = (state = {}, action) => {
   if (actions[action.type]) return Object.assign({},
       state, actions[action.type](action)
   );
   return state;
}
我刚刚在我的第一个减速器和动作上测试了这一点,它是有效的,但似乎很明显,所以我想知道为什么选择开关类型?

一些观察:

  • 不要将这些外部功能称为“操作”。它们不是行动。它们实际上是还原剂
  • 作为还原者,您确实应该将state对象传递给他们。通常,您希望/需要使用当前状态中包含的信息以及操作对象中包含的信息

  • 否则,这似乎是一种合适的方法。

    Switch语句当然是最常见的方法,但查找表也很常见。如果需要,甚至可以使用普通if/then条件。最终,如何编写减缩器取决于您


    仅供参考,本节的中介绍了此主题。您可能还想阅读新的操作指南部分。

    1。您的操作应该将现有状态对象作为参数,对吗?2.开关箱只是一个风格上的决定。只要reducer函数返回一个新的state对象,就可以执行任何操作。无论您觉得什么更整洁:)switch和带有函数的对象(散列)之间的区别可以忽略不计。但是,
    Object.assign
    将状态形状锁定为对象,不允许删除。这对一个普遍的解决方案来说是不行的,这是真的。但无论如何,我总是保持状态形状一致。如果Reducer任意更改状态形状,我的应用程序的其余部分就会出现问题。有时数组比对象更合适。Good point@DDS,我编写了一个小函数,让我定义要从新对象中删除的内容,这可以解决这个问题。感谢您指出这一点。@pedalpete大多数开发人员之所以这样编写减缩器,是因为它更好。别让我生气。