【问题标题】:Redux initial state for variable reducer可变减速器的 Redux 初始状态
【发布时间】:2018-02-20 14:58:26
【问题描述】:

在我的程序中,我有多个网格,但它们非常相似,因此我决定为所有网格制作一个 reducer,以保持我的代码美观和干燥。当我调度事件以更改存储时,我将网格名称作为参数与有效负载一起发送,并且所有内容都写入该网格名称下的存储。

例如:如果我发送事件来更改目录网格的网格标题,那么商店将如下所示:(假设用户已经在商店中)

grid: {
    catalog: {
        headers: {
            some data
        }
    },
    users: {
        headers: {
            some other data
        }
    }
}

我的问题是如何编写模块化初始状态?目前,除了网格名称之外,我没有初始状态,因为没有它们我的代码将无法工作。当我需要将某些内容设置为初始状态时,我必须将其包含在我的函数 initializeGrid 中,该函数会调度一些事件以设置类似于初始状态的内容。

但是如果没有初始状态,我的减速器非常混乱,因为几乎在每种情况下我都必须检查是否存在某种状态或者这是第一次进入。

只知道我并不懒惰,但我的初始状态将像 300 行一样长,而且不会是 DRY :/

什么是正确的解决方案?

【问题讨论】:

  • 请提供一些与您的描述相关的代码。

标签: javascript reactjs redux reducers


【解决方案1】:

除了 {} 之外,为什么还需要初始状态?

reducer 可以使用所需的值更新状态。 如果键存在,则更新其值,如果不存在,则添加。 看看下面的例子:

let x = { "a" : { "b": 11 }}
let y = { ...x, "c" : { "d": 22 }}
let z = { ...y, "a": { "b": 33 }}

数值如下(为了便于阅读,省略了“”):

x: { a: { b: 11 }
y: { a: { b: 11 }, c: { d: 22 }}
z: { a: { b: 33 }, c: { d: 22 }}

【讨论】:

  • 正如我所说,我需要初始状态,因为当我想改变任何东西时,我必须检查那个东西是否有价值。显然我更喜欢在调度初始化函数之前的初始状态(性能缺点)我的减速器是大约 9 层深的对象,它变得很潮:/
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2016-04-23
  • 2017-12-21
  • 1970-01-01
相关资源
最近更新 更多