标题
这是对一篇文章的翻译,原文链接在这里:flux下action的标准命名规范
鉴于redux是在flux的基础上的一个升华,很多本质的内容是相似的。因此Redux的action命名规范是可以参考flux的命名规范的。特此翻译一下。文笔拙劣,多多体谅。
动机
如果我们在对Flux的actions的格式上有一定的规范的话,对于action的操作将会简单很多。例如,所有的flux actions都有一个标识域(identifier field),比如type
,actionType
,actionId
。很多Flux的实现还指明了一个方式来说明操作成功还是失败,这种方式在获取数据操作中尤为重要。为这些模式定义一个一般标准有助于我们开发更有用的工具以及抽象。
将Error作为一个
可以将Flux的actions看做一系列异步的值。对于它们而言如何进行错误处理是相当重要的。现如今,很多Flux的实现都没有进行错误处理,取而代之的是定义了类似于LOAD_SUCCESS
和LOAD_FAILURE
的action类型。这样的实现方式并不理想,因为它存在两个问题:将某一种特定的action类型与一个全局的action类型混淆,而且它指示当前action是否代表了一个error。
设计目标
1.人性化。FSA action应当可以被程序员轻松的读和写
2.可用性。FSA actions应当能够支持创造工具和抽象
3.简洁。 FSA应当简洁直观而且具有灵活性。
例子
一个基本的Flux标准action
{ type: 'ADD_TODO',payload: { text: 'Do something.' } }
描述一个error,类似于一个被拒绝的promise的返回值
{ type: 'ADD_TODO',payload: new Error(),error: true }
Actions
一个action应当
1.是一个普通的javascript对象
2.有一个type
属性
一个action可以
1.包含一个error
属性
2.包含一个payload
属性
3.包含一个Meta
属性
type
action中的type标识通常是向消费者说明action的属性。通常情况下,type是一个字符串常量或者是一个符号标记。如果两个type相同,那么他们必须全等(===)。这里的意思是,type具有唯一性和标志性,用来标记action。
payload
payload标识是可选的,而且可以是任何类型的数据。它表示这个action携带的内容。任何一个不属于type和action状态的值都应该属于payload域。
通常情况下,如果error是true,那么payload应该是一个error对象。
error
error标识是可选的,而且当该action表示一个报错时,其值可以是true。当一个action的error域值为true时,它等价于一个被拒绝的promise。通常情况下,这是的payload值是一个error对象。
如果一个error有其它的非true的值,包括undefined和null,那么这个action就不应当被解读为是一个error。
Meta
Meta标识是可选的,而且可以是任何类型的数据。它旨在保存一切不属于payload的额外信息。
工具
flux-standard-action
模块可以通过npm安装,它提供了一些工具。import {isFSA} from 'flux-standard-action
isFSA(action) 如果action符合FSA标准,那么返回true