redux
(redux不是必须学的,它只是一种代码管理架构,是一个专门用来做状态管理的js库,可能最近做的项目都比较肤浅,数据量也比较少,遇到这个redux反而会觉得让代码越来越复杂)
中文文档:http://www.redux.org.cn/
什么是redux
- 一个状态管理库,它可以管理状态;
- 它可以和vue、angular、react一起配合使用,不是react独有的;
- 作用:就是让多个组件共享状态;
什么情况下用redux
前面说到redux比较复杂,我也是硬着头皮看了两天,才慢慢理解,主要东西太多太杂了,很难记,到底什么时候需要redux呢,什么时候才能发挥它的优势:
- 有了redux,某个组件的状态,需要让其他组件随时拿到(共享)(对于那种多层组件都想用同一个状态的时候,用以前的方法就只能一个传一个,比较麻烦)
- 一个组件需要修改另外一个组件的状态;(之前的消息订阅与发布也可以达到这样的通信,但是容易出现信息泄露的问题)
- 总体原则:能不用就不用,如果不用比较吃力才考虑使用;
redux工作原理
这张图网上比较火,这里借用了一下:
从这个图其实可以看出来,React Components就是react中的多个组件,组件会对状态里的数据进行操作,这种操作我们可以定义成动作,这里Action Creater就是创建一个动作,包含本次动作的类型type,这次动作操作的数据data,Action Creater创建了这个动作后,不是靠自己执行的,需要交给其他人去执行,因此这里的dispatch就是分发给别人的函数,调用就是dispatch(action)
,从图中我们可以看到Action Creater把这个动作交给了Store,Store在这个图中有点像交警指挥者,Store直接移交给别人
(Reducers),Store只能有一个,但是Reducers可以有多个,它们执行移交过来的动作。
Store将动作交给Reducers时,移交了两个参数,一个是previousState,这个是动作操作之前的状态,第二个参数就是动作action,Reucers处理完之后会返回一个新的数据newState。
所以Store最终保存操作完的最新的数据,组件可以通过getState()方法从Store中读取最新的数据;
**注意:**Reducers这里还有一项工作,初始化状态