【问题标题】:Redux Tutorial - why can't or shouldn't the action creator dispatch actions?Redux 教程 - 为什么动作创建者不能或不应该调度动作?
【发布时间】:2017-04-29 12:54:11
【问题描述】:

我正在学习 redux 教程 here。我对“传统 Flux”有一些经验,所以第一个代码块对我来说很熟悉,但我对第二个语句感到困惑。

在传统的 Flux 中,动作创建者通常会在调用时触发调度,如下所示:

function addTodoWithDispatch(text) { const action = { type: ADD_TODO, text } dispatch(action) }

在 Redux 中并非如此。 相反,要实际启动调度,请将结果传递给 dispatch() 函数:

dispatch(addTodo(text)) dispatch(completeTodo(index))

如果我的动作创建者是这样的:

function addTodo(text) {
    return {
        type: ADD_TODO,
        text
    }
}

dispatch(addTodo(text))

这在功能上不等同于第一个代码示例吗?为什么 redux 需要第二种方式来实际调度?

【问题讨论】:

    标签: redux


    【解决方案1】:

    Action Creator 在 Redux 中用于添加额外的间接层和抽象层。

    使用动作创建器而不是直接放置所有逻辑有几个原因:

    封装:始终使用动作创建器意味着组件不必知道创建和调度动作的任何细节。

    抽象:将创建该操作的逻辑放在一个地方。

    简洁:在准备动作对象时可能会有一些更大的逻辑,而不是立即返回它。

    可测试性:可以很容易地为组件编写测试,以代替传入函数的模拟版本。它还可以在其他情况下重用组件。

    有用的资源:

    http://redux.js.org/docs/basics/Actions.html#action-creators

    http://blog.isquaredsoftware.com/2016/10/idiomatic-redux-why-use-action-creators/

    【讨论】:

    • 嘿,这看起来与我在博客文章Idiomatic Redux: Why Use Action Creators? 中写的原因非常相似:)
    • @markerikson 感谢您的评论我添加了您的链接资源和其他有用的答案。
    • 我同意动作创建者比直接在组件代码中调度和定义动作要好得多,但我的问题更像是:为什么更喜欢dispatch(addTodo(text)) 而不是addTodoWithDispatch(text)
    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2020-08-26
    • 2015-10-01
    • 1970-01-01
    • 2020-05-23
    • 2020-02-19
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多