Redux概念之三: Action(动做)与Action Creator(动做建立器)

这两个是Flux架构中的参与成员,Redux中有说明Action的定义:git

Actions(动做)是从你的应用送往store(存储)的信息负载github

你可能会一直在Action(动做)这里看到payload这个字词,它是负载有效数据的意思,这个字词的意思解说你能够看一下,不难理解:redux

Payload用在计算机科学的意思,是指在数据传输时的"有效数据"部份,也就是不包含传输时的头部信息或metadata等等用于传输其余数据。它的英文本来是指是飞弹或火箭的搭载的真正有效的负载部份,例如炸药或核子弹头,另外的不属于payload的部份固然就是火箭传送时用的燃料或控制零件。架构

这个Action是有一个固定格式的,叫做FSA, Flux Standard Action(Flux标准动做),格式会像下面这样,是个JavaScript的对象字面定义:async

{
  type: 'ADD_TODO',
  payload: {
    text: 'Do something.'
  }
}

这样一个用于描述动做的单纯对象字面定义,就称为Action(动做)。函数

为何要先写出明确的Actions(动做),也就是把全部的组件会用到的Actions(动做),所有集中写到一个档案中?这也是个硬规则,就像你若是参加奥运的体操比赛,每种项目都有规定的动做,在必定的时间内只能做这些动做,按照表定运行。主要仍是由于Redux并不知道你的应用程序里会做什么动做,须要有一个明确说明有哪些动做的地方,在运做时以这个对照表为基准。学习

固然,Actions(动做)必须要有type(类型),并且在同一个应用中的type(类型)名称是不能重覆的,它的概念有点相似于数据表中的主键属性。翻译

那么Action Creator(动做生成器)又是什么?设计

在程序语言的函数库中,若是是个英文的名词,一般都是表明某种对象或数据格式,例如Action(动做)就是个单纯的对象。若是叫什么xxxxter或xxxxtor的,中文翻译是"器"、"者",一般就是个函数或方法,像上面的reducer和这里的Action Creator,都是一种函数。code

Action creator的设计也是由Flux架构来的产物,它是一种辅助用的函数,用来建立Action的。但由于设计的不一样,在Redux中的Action creator比在Flux更简单,它一般只用来返回Action对象而已,固然它自己是个函数,在返回前是能够再针对返回的动做数据先进行运算或整理的,例如像下面这样的函数:

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

这个addTodo函数,有一个传参,这个传参就会用于组成Action对象中的payload(有效数据)。

若是一个Action对象简单到连payload(有效数据)都没有,一般会是个固定payload(有效数据)的动做,例如每动做一次+1或-1,或是每动做一次在true或false值切换,那么在Redux中容许连Action或Action Creator均可以不用写了。可是这种状况大概只有在很小的应用,或是学习阶段的例子才会这样,若是应用仍是有必定程度的复杂度,必定都是要写出来的。

固然,Action Creator天然有它很重要的做用,其中之一就是处理有反作用的运行,例如计时器、Fetch/Ajax等等,由于reducer是一个强制没法有反作用的纯函数,因此Redux中的反作用会写在在Action Creator里,不过这须要再配合中介软件(middleware)来运行,以后的章节会再说明。

注: Action Creator在Redux中并无必定要是个纯函数,只是不建议在里面直接运行有反作用的函数。请参考这篇在stackoverflow的Reduce做者的回答

相关文章
相关标签/搜索