Redux观点之三: Action(行动)与Action Creator(行动建立器)

这两个是Flux架构中的介入成员,Redux中有申明Action的定义:

Actions(行动)是从你的运用送往store(存储)的信息负载

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

Payload用在计算机科学的意义,是指在数据传输时的”有用数据”部分,也就是不包括传输时的头部信息或metadata等等用于传输其他数据。它的英文原本是指是飞弹或火箭的搭载的真正有用的负载部分,比方火药或核子弹头,别的的不属于payload的部分固然就是火箭传送时用的燃料或掌握零件。

这个Action是有一个牢固花样的,叫作FSA, Flux Standard Action(Flux规范行动),花样会像下面如许,是个JavaScript的对象字面定义:

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

如许一个用于形貌行动的纯真对象字面定义,就称为Action(行动)。

为何要先写出明白的Actions(行动),也就是把一切的组件会用到的Actions(行动),悉数集合写到一个档案中?这也是个硬划定规矩,就像你假如列入奥运的体操比赛,每种项目都有划定的行动,在肯定的时间内只能作这些行动,按照表定运转。主要照样由于Redux并不知道你的运用程序里会作什么行动,须要有一个明白申明有哪些行动的处所,在运作时以这个对照表为基准。

固然,Actions(行动)必须要有type(范例),而且在同一个运用中的type(范例)名称是不能重复的,它的观点有点类似于数据表中的主键属性。

那末Action Creator(行动生成器)又是什么?

在程序语言的函数库中,假如是个英文的名词,一般都是代表某种对象或数据花样,比方Action(行动)就是个纯真的对象。假如叫什么xxxxter或xxxxtor的,中文翻译是”器”、”者”,一般就是个函数或要领,像上面的reducer和这里的Action Creator,都是一种函数。

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作者的回复

    原文作者:eyesofkids
    原文地址: https://segmentfault.com/a/1190000008210026
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞