Redux-Saga ES6类语法方法在调度操作时不会被调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redux-Saga ES6类语法方法在调度操作时不会被调用相关的知识,希望对你有一定的参考价值。

使用redux saga已经实现了类中的所有方法,因为下面的静态方法是代码。

当调度动作FETCH_POST时,也会注册rootSaga静态方法,它永远不会执行fetchAuthorSaga,因此调用web api永远不会发生,而是转到reducer,其中检查时的类型显示FETCH_POST没有数据。我在这里失踪了什么?

enter image description here

enter image description here

答案

() => SagaAuthor.fetchAuthorSaga是一个“noop”。您正在传递一个返回生成器的函数,但它必须是一个生成器本身。

它应该是takeEvery('FETCH_POST', SagaAuthor.fetchAuthorSaga)

Docs

takeEvery(pattern, saga, ...args) ... saga: Function - 发电机功能

你需要在rootSaga中做以下事情

yield all([
   call(SagaAuthor.onBootstrap) // should be effect 
])

此外,“已经将类中的所有方法都实现为静态方法”这种方法没有多大意义。为什么你需要一个没有实例的类?只需使用object literal或模块本身。

以上是关于Redux-Saga ES6类语法方法在调度操作时不会被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Jest在ES6类方法中测试对redux存储的调度?

redux-saga

如何让 ES6 生成器等待承诺,就像在 redux-saga 中一样?

深入ES6中的class类

redux-saga 与 redux 一起使用会导致 render() 被调用两次

使用 redux-saga 和 fetch 自动处理 401 响应