我搜索了高低,但找不到明确的答案 .
我已经设法绕过Redux的机制,但是当我在Promises的背景下坚持使用中间件时 .
你能帮我搞清楚吗?
Cotradictory的拼图让我头疼:
-
YT教程之一说,本机Redux调度方法不支持从动作创建者返回的promise - 因此需要Redux Promise库(我知道项目现在可能已经死了,延续是Redux Promise Middleware) .
-
Dan在“What is the difference between redux-thunk and redux-promise?”中说道,即使没有中间件,我也可以使用承诺 - 只需在动作创建者中管理它们 .
-
在其他答案中,我找到了使用thunks的示例,其中动作创建者返回了... promise (后来是在调用者处理/dispatch(myActionCreator(params) . 然后(... . )/所以承诺 can 由thunk WITHOUT 任何redux-promise lib ..?
-
在“What is the difference between redux-thunk and redux-promise?”中,接受的答案表明Redux Thunk返回函数,而Redux Promise返回promises ..到底是什么?
总结一下:使用Redux Promise或Redux Promise Middleware有什么意义?为什么Redux本身不支持承诺?
Update:
我刚刚意识到,在上面的第3点,我忽略了 then()
attached 到 dispatch
而不是 included 在 dispatch()
args .
2 回答
链接的答案是正确的,但我会尝试进一步解释 .
基本的Redux存储只接受调度普通对象操作:
如果您尝试传递除普通对象操作之外的任何内容,则存储将抛出错误:
Middleware form a pipeline around store.dispatch(),每个中间件都可以使用传递给
dispatch
的所有值做任何事情:modify it, log it, delay it, or dispatch something else instead it . 这意味着中间件可以通过截取值并执行其他操作来接受不是普通操作对象的内容.Page 1020718_dispatch()
所以,
redux-thunk
"teaches"dispatch
如何接受函数,通过拦截函数并调用它而不是将它传递给reducers .redux-promise
"teaches"dispatch
如何接受承诺,通过在承诺解决或拒绝时拦截承诺和派遣行动 .通常,
dispatch
返回传入的任何操作对象 . 由于中间件环绕dispatch
,它们还可以更改返回的值 .redux-thunk
将运行thunk函数,并返回thunk函数返回的任何内容 . 这可以让你做一些有用的事情,比如从thunk返回一个promise,以及从那里返回链接行为:有关该主题的更多信息,请参阅Redux FAQ entry on dealing with side effects,以及React/Redux links list的Redux Side Effects部分中的文章 .
你需要那些中间件以避免竞争条件,因为javascript是异步的 . 它们之间的区别仅在于实现,thunk与函数一起工作,sagas与发生器等