简单的聊一聊redux
一、何时需要用redux?????
如果你react项目中你不知道什么时候应该使用redux,那就是你不需要它,redux的创造者 Dan Abramov 补充过这样一句话: 只有当遇到 react 解决不了的问题,才需要 redux!!!
简单的来说,如果你的UI层非常简单,组件之间没有很多的数据相互,Redux 就不需要,用了反而增添项目的复杂性,不方便后期的维护。 以下场景你可能需要使用上redux:
1、某个组件的状态,需要共享
2、某个状态需要在任何地方都可以拿到
3、一个组件需要改变全局状态
4、一个组件需要改变另一个组件的状态
二、redux 设计思想
Redux 的设计思想很简洁,简单的用一张图来描述吧。
![](https://img.haomeiwen.com/i11088880/07217dd194d681c7.jpg)
三、基本概念和 API
1、Store
Store 就是保存数据的地方,你可以把它看成一个容器,整个应用只有一个Store。
Redux 提供 createStore 这个函数用来生成 Store
![](https://img.haomeiwen.com/i11088880/12f3d66c804b9eae.jpg)
2、State
Store 对象包含所有的数据,如果想得到某个时刻的数据,就要对 Store生成快照,这种集合,叫做State。当前 Store ,可以通过 getState() 拿到。
store.getState()拿到的就是redux中存储的state值
3、Action
State 的变化,会导致 页面UI 的变化。但是用户接触不到 State,只能接触到 页面UI,所以State 的变化必须是页面用户导致的。因此Action 就是 页面用户触发改变 State 的通知。
Action 是一个对象,期中 type 的属性是必须的,表示 Action 的名称,其他的属性可以自由设置data表示要修改或者储存的数据。
![](https://img.haomeiwen.com/i11088880/513b0bb92e2f54ea.jpg)
4、store.dispatch
这个是 用户 发出 Action 的唯一方法,接受一个 Action 对象作为参数,将它发送出去 。
![](https://img.haomeiwen.com/i11088880/7f5b8d3715348fe0.jpg)
5、Reducer
Store 收到 Action 以后,必须要给出一个新的 State,这样 页面数据才会发生变化,这种 State 的计算过程我们叫做 Reducer 。
![](https://img.haomeiwen.com/i11088880/7e1e141fc1e307ec.jpg)
四、Store的实现
store提供了3个方法:
1、store.getState() //获取state的数据
2、store.dispatch() //触发action修改数据
3、store.subscribe() //检测redux状态的变化,一旦有变化,store就会调用监听函数就会render重新渲染页面
五、react-redux
实际项目中,需要权衡是直接使用Redux还是用React-Redux,那么它是什么呢?
react-redux主要用于关联react和redux之间的一个数据交互插件,实现react组件和redux完美结合起来。
以下就用一个案列来简单的看一下吧。
首先看一下基本目录
![](https://img.haomeiwen.com/i11088880/2c50eb1064f47f73.jpg)
1、connect()连接
![](https://img.haomeiwen.com/i11088880/7309ddeff31f4cf7.jpg)
![](https://img.haomeiwen.com/i11088880/9d065cf4801afea7.jpg)
2、<Provider> 组件
connect方法生成容器组件以后,需要让容器组件拿到state对象,才能生成 UI 组件的参数。
React-Redux 提供Provider组件,传入store,可以让容器组件拿到state
![](https://img.haomeiwen.com/i11088880/c7bfffcde4126ee2.jpg)
好了、大概就介绍这里吧、里面还是有很多注意的关键点,不懂的同学多瞧一瞧慢慢理解每一个api,其实写几个demo之后就能知道了。