【问题标题】:Is it OK with redux sgas to call generator methods directly用redux sgas直接调用生成器方法可以吗
【发布时间】:2019-01-03 21:43:03
【问题描述】:

目前我有一个拦截特定动作的根传奇。我的组件通过 actioncreator 调度动作......但是我需要这些动作创建者吗?我可以直接从组件中调用其中一个生成器函数吗?

我才刚刚开始使用 sagas,不确定是否还应该使用动作创建器。

【问题讨论】:

  • 你能发布一些示例代码
  • 这不是违背了使用 redux 的目的吗?绕过操作意味着您不再有时间旅行调试或清晰的调试路径
  • 我仍然想分派动作,但它们中的大多数现在都在生成器函数本身中使用yield put() 进行分派。所以我想也许我可以绕过调度 root saga 监听的初始操作,直接以某种方式调用它们
  • 你绝对可以编写你自己的迭代器管理器(这基本上是 redux-saga 为你做的事情)。但是你失去了他们已经为添加效果所做的工作,以及 redux-saga 的整个生成器/迭代器中间件处理程序。有滚动您自己的生成器/迭代器中间件的用例,但我绝对建议从 basics 开始,并真正确定这是否是正确的方法

标签: reactjs generator redux-saga


【解决方案1】:

不,您不应该直接从您的应用程序组件中调用任何 sagas。 sagas 的全部意义在于,它们将副作用管理抽象为与应用程序的其余部分分离的独立层。这意味着您的应用程序甚至不知道某处某处正在侦听某些操作。

您的组件在其工作流程中会生成一些操作,但它们永远不知道这些操作是否会触发任何其他操作。如果它发生是因为 saga 产生了新的动作——那么这就是副作用。通过将副作用与其他逻辑分开,您可以实现高级别的抽象和虱子耦合。

再一次,你永远不想自己调用 sagas 函数。

【讨论】:

  • 感谢 cmets。我读到 Sagas 的一个好处是他们减少了样板代码......但是现在我每次想要采取新的行动时都必须改变我的根 saga,然后为它创建一个工人。我明白为什么我应该使用 sagas,但如果有的话——就样板代码而言——我的代码是在增加而不是减少。这就是为什么我希望我可以手动触发一个生成器函数,而不用打扰动作创建者,只需在我的生成器中使用 put() 来调度动作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多