Redux Promise和Redux Promise Middleware有什么意义?

我搜索了高和低,但无法找到明确的答案。

我已经设法将我的头围绕在Redux的机制上,但是当我接触到API调用和异步动作创建者时,我在Promises的上下文中坚持使用中间件。

你能帮我弄好吗?

给我头疼的难题Cotradictory片断:

  • YT教程之一说,本地Redux调度方法不支持动作创建者返回的promise,因此需要Redux Promise库(我知道该项目现在可能已经死机,而延续是Redux Promise Middleware)。

  • 丹在“还原 - 还原和还原 - 诺言之间有什么区别?” 即使没有中间件,我也可以使用承诺 - 只需在动作创建者中管理它们即可。

  • 在其他答案中,我找到了使用thunk的例子,其中动作创建者返回了... promise (稍后在调用者/dispatch(myActionCreator(params).then)中处理(因此,承诺可以没有任何redux-promise lib ..?

  • 在“redux-thunk和redux-promise之间有什么区别?”中,接受的答案指出Redux Thunk返回函数,而Redux Promise返回promise ......那是什么?

  • 总结:使用Redux Promise或Redux Promise Middleware有什么意义? 为什么Redux本身不支持承诺?

    更新:

    我刚刚意识到,在上面的第3点中,我忽略了then()附加dispatch并且不包含dispatch()参数中。


    链接的答案是正确的,但我会尝试进一步解释。

    基本的Redux商店将只接受调度简单对象操作:

    store.dispatch({type : "ADD_TODO", text : "Buy milk"});
    

    如果您尝试传递除简单对象操作之外的其他任何内容,则商店将发出错误消息:

    store.dispatch(() => {});
    // Error: "Actions must be plain objects. Use custom middleware for async actions."
    

    中间件在store.dispatch()周围形成一个管道,每个中间件都可以根据传递给dispatch任何值执行任何操作:修改它,记录日志,延迟它或派发别的东西。 这意味着一个中间件可以“教” dispatch()如何接受不是普通操作对象的东西,通过拦截该值并执行其他操作。

    因此, redux-thunk “教授”通过拦截函数并调用函数而不是将其传递给reducer来dispatch如何接受函数。 redux-promise “教导”通过在承诺解决或拒绝时拦截承诺和调度行为来dispatch如何接受承诺。

    通常情况下, dispatch返回传入的任何操作对象。由于中间件环绕dispatch ,它们也可以更改返回的值。 redux-thunk将运行thunk函数,并返回thunk函数返回的任何内容。 这可以让你做一些有用的事情,比如从thunk回报承诺,并从那里链接行为:

    dispatch(someThunkReturningAPromise())
        .then(() => {
            // Do more stuff here
        });
    

    有关该主题的更多信息,请参阅处理副作用的Redux FAQ条目以及我的React / Redux链接列表的Redux副作用部分中的文章。


    您需要这些中间件以避免竞争条件,因为javascript是异步的。 他们之间的差异只是实现,thunk工作与功能,传说发电机等

    链接地址: http://www.djcxy.com/p/59061.html

    上一篇: What is the point of Redux Promise and Redux Promise Middleware?

    下一篇: Thunk instead of a custom middleware?