这篇只是有关于Redux所记得一些笔记,比较杂乱,是初次接触到Redux我们必须应该掌握的基础知识,希望看了这篇文章对你有所帮助。
基本概念
Redux的设计思想只有两种
- Web应用是一个状态机,视图和状态是一一对应的。
- 所有的状态都保留在一个对象里。
Store是什么?
Store就是一个保存数据的地方,可以看做是一个容器,整个应用只能有一个Store。
Redux提供了createStore
函数用来生成一个Store。
createStore
函数接受另一个函数作为参数,返回新生成的Store。
State又是什么?
State对象包含了所有的数据,如果想要得到某个时点的数据,就要对Store生成快照,这种时点的数据集合就是State,当前时刻的State可以通过Store.getState()拿到。
Redux规定一个State对应一个View,只要State相同,View就相同,你知道State,就知道View。
Action
State的变化会导致View的变化,但是用户接触不到State,只能接触到View,所以State的变化必须是View导致的,Actio就是View发出的通知,表示State应该要发生变化了。
Action是一个对象,其中的type属性是必须的,表示Action的名称,其他属性可以自由设置,社区内有规范可以参考。
Action的社区内规范
- 一个Action必须存在的属性是type
- 一个Action可能存在的属性
- Error
- payload
- meta
Type: 是一个必须的属性,通常是一个字符串或者Symbol值,如果希望两个type的值相同,他们必须遵守严格模式下的相等规定。
payload: payload是一个可选属性,他没有规定值得属性,他表示了Action的payload,任何有关于的Action发出的消息,比如Type值得类型错误,或者状态异常是,payload都会记录在自身中。
按照惯例,如果当另一个属性值Error为true时,那么payload应该是一个Error的对象,这个有点类似于Promise中的reject函数中所带有的Error对象。
Error: Error属性有可能设为true,如果Action表示一个error的时候,当Action的某个Error的属性为true时,就类似与Promise中的reject函数,按照规定,payload应该是Error的一个对象。如果Error存在为true以外的其他的值,包括null,undefiend,那么Action就不能被看着是一个Error来解析。
meta: meat属性也可以是任何值,他是为了储存一些其他的额外信息,比如不是payload的那部分的数据而做的准备。
一些实用的函数
flux-standard-action
是一个可以使用npm来获得的插件,他提供了一些很实用的方法