Redux,使用dispatch并且不要变异..除了有时候?

时间:2016-07-09 21:00:31

标签: javascript reactjs redux

好的,所以我对Redux非常陌生。我正在浏览创作者的30个教程。到目前为止,我已经非常密切地关注了,但是在vid 17这里有一个曲线球:

https://egghead.io/lessons/javascript-redux-react-todo-list-example-adding-a-todo

核心概念以:

出售
  • 整个App状态表示为单个不可变对象
  • 你不会改变那种状态 - 只需通过调用dispatch
  • 表达欲望

然后突然,在这个视频中:

  1. 全局变量用于跟踪应用状态(下一个要添加的ID)
  2. 它的值会直接变异 - 无需调度操作
  3. 直接读取/写入文本框的内容,而不使用状态或dispatch
  4. 继续前面的说法,我会猜到下一个项目ID和文本是app状态对象的一部分。

    这是在没有第二个想法的情况下完成的,我正在尝试处理和推理每一步所引入的,并找出任何意义。可能会有,并随时告诉我!但为了以防万一,我有一些猜测,为什么会这样,虽然它们并不像到目前为止卖给我的东西那样“整洁”。它们主要围绕定义(或重新定义)“app state”。这一切似乎都是随意的 - 例如:

    • 仅仅是因为这些“正在进行中”的新项状态属性是简单的值类型吗?
    • 因为我们认为在定义的行为之间发生的任何事情是无关紧要的吗?
    • 因为在某些时候我们都暗中想要变得有点懒惰,我们可以在这里侥幸逃脱吗?
    • 因为我们暗中承认在某些时候减速器更加冗长? :)

    所以,我想知道是否有共识/正确和明确的答案 - 谢谢。

1 个答案:

答案 0 :(得分:2)

我认为如果你一直看完教程系列,他将摆脱id生成逻辑。一般来说,无论如何,这不属于客户端。我认为他将摆脱直接的文本框访问。

但是,作为一个原则,您可以认为生成自动增量值是一个合理的变异位置。

至于直接阅读和写入文本框,我会说它通常不是“React”做事的方式。我已经在一些自定义组件中完成了它(例如出于特殊屏蔽原因),但通常,您将文本框绑定到某个状态值并使用reducer更新该值。

读/写输入状态有很多模式。 Redux form是一个受欢迎的。

我个人使用事件委托,每个表单都有一个事件处理程序,根据状态/值发生变化的输入名称更新状态。我发现这会产生最少量的代码,通过一个动作和一个相对简单但灵活的减速器将状态更新保存在一个地方。