Redux教程-为什么可以';t或不应该';操作创建者是否不发送操作?

Redux教程-为什么可以';t或不应该';操作创建者是否不发送操作?,redux,Redux,我正在学习redux教程。我对“传统通量”有一些经验,所以第一个代码块对我来说很熟悉,但我对第二个语句感到困惑 在传统的Flux中,动作创建者通常在调用时触发分派,如下所示: 函数addTodoWithDispatch(文本){ 常量动作={ 类型:ADD_TODO, 文本 } 派遣(行动) } 在Redux中,情况并非如此。 相反,要实际启动分派,请将结果传递给dispatch()函数: 调度(addTodo(文本)) 调度(completeTodo(索引)) 如果我的动作创建者是:

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

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


函数addTodoWithDispatch(文本){
常量动作={
类型:ADD_TODO,
文本
}
派遣(行动)
}

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


调度(addTodo(文本))
调度(completeTodo(索引))

如果我的动作创建者是:

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

dispatch(addTodo(text))

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

在redux中,动作创建者用于添加额外的间接层和抽象层

使用action creators而不是直接使用所有逻辑有几个原因:

封装:一致使用动作创建者意味着组件不必知道创建和分派动作的任何细节

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

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

可测试性:很容易为传递函数模拟版本的组件编写测试。它还允许在另一种情况下重用组件

有用资源:


嘿,这看起来与我在博客帖子中所写的原因非常相似:)@markerikson谢谢你的评论我在我的答案中添加了你的链接资源和其他有用的内容。我同意动作创建者比直接在组件代码中分派和定义动作要好得多,但我的问题是:为什么更喜欢
dispatch(addTodo(text))
而不是
addtowithdispatch(text)