什么是Action
Action是数据从应用传递到 store/state 的载体。是store数据的唯一来源。
action是一个对象,用于描述改变应用程序状态的事件(或者说根本作为reducer的参数而存在的,为了给reducer传入新的数据、事件的类型等。通过dispatch
调用后发给reducer
)
如何定义
const ADD_TODO = 'ADD_TODO'
{
type: ADD_TODO,
index: 5
}
action 内必须使用一个字符串类型的 type 字段来表示将要执行的动作。当应用规模越来越大时,建议使用单独的模块或文件来存放 action。
人们通常声称常量不是必要的。对于小项目也许正确。 对于大的项目,将 action type
字段 定义为常量有如下好处:
- 帮助维护命名一致性,因为所有的 action type 汇总在同一位置。
- 有时,在开发一个新功能之前你想看到所有现存的 actions 。而你的团队里可能已经有人添加了你所需要的action,而你并不知道。
- Action types 列表在 Pull Request 中能查到所有添加,删除,修改的记录。这能帮助团队中的所有人及时追踪新功能的范围与实现。
- 如果你在 import 一个 Action 常量的时候拼写错了,你会得到 undefined 。在 dispatch 这个 action 的时候,Redux 会立即抛出这个错误,你也会马上发现错误。
应该尽量减少在 action 中传递的数据。比如上面的例子,传递 index 就比把整个任务对象传过去要好。
Action 创建函数
在 Redux 中的 action 创建函数只是简单的返回一个 action:
function addTodo(text) {
return {
type: ADD_TODO,
text
}
}
这样做将使 action 创建函数更容易被移植和测试。
调用
dispatch(addTodo(text))
或者创建一个 被绑定的 action 创建函数 来自动 dispatch:
const boundAddTodo = text => dispatch(addTodo(text))
const boundCompleteTodo = index => dispatch(completeTodo(index))
然后直接调用它们:
boundAddTodo(text);
boundCompleteTodo(index);