【问题标题】:Redux vs services in Angular 2Angular 2 中的 Redux 与服务
【发布时间】:2016-10-12 12:58:22
【问题描述】:

我想确保我对 Redux 的理解是正确的。我的理解是它将存储应用程序(包括所有子系统)的 complete 状态,例如所有组件的模型以及获取的数据和用户生成的数据的缓存。这是否意味着我永远不应该使用服务通过模型的 id 来加载/保存组件的状态?

我正在制作一个测验应用程序,它由测验类别问题选择等组件组成>。目前,每个组件都调用 Web API 来获取数据并自己维护自己的状态,或者借助通过 id 字段跟踪所有内容的服务。

我有一个名为 AnswerService 的专用服务来维护所选选项的状态,其中每个 Choice 组件在呈现时获取其状态。

迁移到 Redux 是否意味着所有这些都将移至 store,几乎所有服务都将是无状态的并直接调度到 store,并且所有组件模型都分别从 store 订阅?

【问题讨论】:

    标签: javascript design-patterns architecture angular redux


    【解决方案1】:

    “迁移到 Redux 是否意味着所有这些都将转移到存储中”

    没有。
    如果您使用的是ngrx,那么处理这个问题的最佳方法是使用ngrx/effects。这是一个配套库,旨在成为“放置异步代码的地方”,或者换句话说,是做副作用的地方。因此,当组件需要一些新数据时,它会分派一个“GET_DATA”操作,这将作为 ngrx @Effect 处理。在您的效果内部,您可以使用自定义服务来调用和检索数据(因此您的异步服务可能很好,可能只需要稍微调整一下)。然后你将一个包含新数据的动作返回给reducer,reducer用新数据更新状态。您的组件一直在订阅以存储整个时间,因此当减速器更新状态时,组件知道此更改并可以自动更新它自己的本地状态。

    【讨论】:

      【解决方案2】:

      感谢您的提问。我面临着同样的困境。我现在回答自己的方式是,我仍然有可测试的服务来封装“redux”函数执行的状态更改操作。 在我看来,你在基本 redux 示例中看到的带有巨大 if 语句的 redux 函数只是一个开始......我想没有人会在大型应用程序中真正编写这样的代码...... 然而,我想说,让这个 redux 中介来捕获任何状态改变事件并将其分派到相应的服务看起来是个好主意。仍然不确定我们是否还希望将只读内容封装在服务中......也许不是......但这将是另一个讨论。

      【讨论】:

        猜你喜欢
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 2018-04-10
        • 2016-09-30
        • 2017-08-24
        • 2017-02-25
        • 1970-01-01
        相关资源
        最近更新 更多