【问题标题】:Should action creator functions only change one field?动作创建函数是否应该只更改一个字段?
【发布时间】:2017-07-19 00:03:04
【问题描述】:

我正在学习 redux,在看完 todos 教程后有点困惑。在教程中,他们展示了一个非常小的待办事项列表示例,其中一个文本字段用于待办事项,另一个字段显然与不同的操作配对

{
    text: "todo item",
    completed: false
}

他们的动作例如被定义为:

ADD_TODO: 'ADD_TODO'
TOGGLE_TODO = 'TOGGLE_TODO'

这是有道理的,但是您将如何构建像一个充满应用程序设置的大对象?我应该为每个设置名称创建一个操作吗?

{
    fooSetting: "foostuffs",
    barSetting: "barstuffs",
    fooWithChild: {
        fochild: "foochild",
        fooChild2: "there are an arbitrary number of settings"
    }
    ... with an arbitrary number of additional settings. 
}

您将如何为具有这种任意大小的结构的 json 制作动作和动作创建者?

【问题讨论】:

  • 动作创建函数不会改变任何东西,它们会创建动作。如果你问 reducer 是否应该只更改一个字段,那么不,他们应该更改他们需要更改的任何内容。

标签: reactjs redux react-redux


【解决方案1】:

对于 action 和 reducer 的精细程度没有单一的规则。如果你愿意,你应该随意使它们更通用。

因此,举个例子:如果我有一个输入姓名和地址的表单,我可以执行"SET_USER_FIRST_NAME""SET_USER_LAST_NAME""SET_USER_CITY" 等操作。但是,有对每个领域采取不同的行动可能并没有多少实际好处。相反,您可能只有一个 "UPDATE_USER_FORM" 操作。

你甚至可以在你的 reducer 中执行类似return {...state, ...action.payload} 的操作,尽管我试图限制我这样做的频率,因为它并不能提供实际更新哪些字段的信息。

【讨论】:

  • 我最终解决了这个问题,但它有点复杂,因为我嵌套了几个级别,它开始变得有意义,为什么文档警告不要嵌套,尽管它非常方便
  • 是的,正如您所看到的,建议的方法是扁平化您的数据结构,或者使用更多的 reducer 组合将更新每个级别数据的工作委托给一个较小的函数,以使事情变得更简单.
  • 如果可能的话,你能链接到一个reducer组合的例子来避免冗长的嵌套逻辑吗?谢谢
猜你喜欢
  • 2015-10-16
  • 2021-02-03
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多