我一直在读,我应该使用redux-thunk或redux-saga来处理副作用 . 为什么不简单地使用这样的动作创建者来发送多个动作:
function loadProductActionCreator(dispatch) {
dispatch({
type: 'load_product',
})
fetch('api/product').then(
function (r) {
return r.json();
}
)
.then(function (res) {
dispatch({
type: 'loaded_product',
data: res
})
})
}
我试过了,它有效(complete code) . 所以我想一定有一些我不知道的不便之处 .
2 回答
你的代码类似于thunk的代码 .
按照
redux
docs,行动应该是纯粹的 . 并且它们应始终为相同的输入参数返回相同的值 . 通过使用fetch
,您允许操作返回非特定值,而不是来自服务器的值,这意味着操作响应可能会随时间而变化 .这叫做 side effects . 并且它默认情况下在redux操作中 .
但为什么?
是的,你可以像你一样在里面输入它,在小应用程序中它并不重要 .
在较大的应用程序中,使用
redux-saga
有以下好处:Possible advantages:
清洁代码库(但可能是较小应用程序的开销)
将"dummy"操作与执行请求和实际API中间件所需的所有信息分离
请求参数直接在redux dev工具中可见
可能很容易
debounce
,throttle
抓取可能真的很难用redux-thunk可以轻松组合操作(等待另一个事件/获取,链事件)
可以停止运行任务
从个人经验来看,在一个项目(更大的代码库)上我们已经开始使用
redux-thunk
,但后来我们需要集成更多高级功能,如限制和操作之间的一些依赖关系 . 所以我们把所有内容重写为redux-saga
,它对我们来说效果很好 .你在这里复制redux-thunk . 纯redux动作创建者应该返回要调度的动作对象,而不是自己调度动作(参见redux doc on action creator) .
为了更好地理解为什么你的技术是redux-thunk的复制,请查看其作者的this post