Redux-Saga中ES6类静态方法触发action时未执行问题排查
我最近在Redux-Saga里尝试把所有saga方法都写成类的静态方法形式,已经注册了rootSaga静态方法,但遇到了一个头疼的问题:当我派发FETCH_POST action时,fetchAuthorSaga完全没执行,Web API调用根本没触发,action直接就走到reducer里了——此时action的type是FETCH_POST,但没有预期的接口返回数据。想请教下我到底遗漏了什么?
附上我的代码截图:


我梳理了几个可能的原因,你可以逐一排查:
- saga监听未正确绑定:你需要确保在
rootSaga里用Redux-Saga的effect(比如takeLatest/takeEvery)把FETCH_POSTaction和fetchAuthorSaga绑定起来。比如你的rootSaga应该像这样:
static* rootSaga() { yield all([ takeLatest(FETCH_POST, YourClass.fetchAuthorSaga), // 其他需要监听的saga ]); }
如果只是定义了fetchAuthorSaga方法,但没在rootSaga里注册监听,Redux-Saga根本不知道要触发它。
rootSaga未正确整合子saga:如果你的rootSaga没有用
yield all()来并行启动所有子saga,或者只返回了单个saga,那子saga不会被激活,自然不会响应对应的action。saga中间件配置缺失:检查你的Redux store创建流程,有没有把sagaMiddleware配置进去,并且调用
sagaMiddleware.run(YourClass.rootSaga)。如果这一步没做,整个saga系统都不会工作,action会直接流向reducer。fetchAuthorSaga内部写法错误:比如有没有用
calleffect发起API请求,有没有用puteffect派发成功/失败的action?如果内部有语法错误或者effect使用不当,可能导致saga静默失败,看起来就像没执行一样。
内容的提问来源于stack exchange,提问作者user581157
相关产品推荐
相关产品推荐

