redux.js详解及基本使用


Posted in Javascript onMay 24, 2019

什么是Redux

​      Redux我们可以把它理解成一个状态管理器,可以把状态(数据)存在Redux中,以便增、删、改。例如:

从服务器上取一个收藏列表,就可以把取回来的列表数据用Redux管理,多个页面共享使用,不用把数据传来传去。

A页面改变了一个状态,B页面要收到通知,做相应的操作。

​       Redux是一个给JS应用使用的可预测的状态容器,也就是说结果是可预测的,每一次改动会有确定的结果,正如函数式编程思想里的相同的参数会返回相同的结果。

​       Redux的状态会存储在单一的数据源中(存储在对象树中),这样,读取和共享就非常方便,不必去考虑会取错。状态是只能直接读取的,不能直接修改,修改只能通过发送事件(action)统一处理,这样便于分析事件,也可以避免随处修改状态造成竞态条件。统一处理状态时用纯函数(reducers中的函数)来修改状态,这些函数只是一个勾子,当需要修改状态树时Redux会来调用,你可以编写不同的函数来处理不同action对应的状态,或者复用一个函数来处理多种action。

为什么要用

​        简单来说就是使不易维护的数据变得维护简单,以小程序举例:多个页面要共享一套数据,而且这些数据是随时可能从网络上获取更新或增减的(如页面跳转时要带数据过去(非基本类型的数据),这时如果用app中的全局变量来暂存,存的变量多了,以后维护是个大麻烦,别人接手代码也会很烦恼。),还有一个地方的数据有改变,其他地方要收到通知等这些场景就可以使用Redux来做,如果你没有遇到这些问题,说明你的项目还没有到这些复杂的阶段,可以暂不考虑用Redux。

Redux的四个部件

redux.js详解及基本使用

Action:action是一个事件,用来描述发生了什么事,例如用户点击了一个刷新按钮,就会产生一个获取最新数据的事件,Action就是用来标识这个事件的,Action是一个JS对象,拥有2个属性,一个type,一个data,type用来表示该action的类型,data为新的状态数据,既然是对象当然还可以带上一些其他的属性,在处理状态的时候使用。
Reducer:reducer是一个处理状态的函数,真正的状态数据处理就是在这个函数里,reducer接受两个参数,一个是修改前的状态(state)对象,一个是action。可以在reducer中判断action的type属性来确定是一个什么事件然后对state做相应的处理,并返回新的state。

Store:store是Redux的CPU,状态处理器,它提供了一些api给我们使用,如:

getState方法,可以获取到最新的状态对象树。
subscribe方法用来订阅状态的更新,该方法接受一个函数做为监听器,并会返回一个注销订阅的函数,以便我们在不需要订阅时注销改监听器。

dispatch方法用来分发事件,它接受一个action作参数,把事件发出去。

State:state是存储的数据,数据会以对象树的结构来管理,这里要注意,Store每次传给reducer的state是整个state对象树中对应该reducer名字(key)的子对象。

​        事件发出后store会派reducer去处理事件,得到新的state,然后通知给各个监听器有新的变化(观察者模式)。
总体来说Redux就像是一个快递仓库(store),里面的货物(state)按地域分别存储,每当有一个新的货物进来(dispatch),处理程序或人员(reducer)就会去按地名(type)添加到仓库对应的位置,然后仓库通知(subscribe)快递员来取货物。

1、先是安装reduxJx, cnpm i --save rudux
2、创建一个store的js文件 
3、使用import来引用 redux   import { createStore } from 'redux'
4、然后在store 创建一个全局管理数据对象


const preloadState = {
  cartList: []
}
5、处理全局数据的方法
const reducer = function(state, action){
// 参数state:上一次的state状态
// 参数action:事件描述对象
console.log(action.type);
处理数据方法
if (item.a === 0 ){
  ...代码
}
//返回下一次全局使用的state状态
return state;
}
//创建仓库
const store = createStore(reducer, preloadState);
export default store
6、dispatch的使用 
    在store以外 store.dispatch()调用 参数1:设置store里面的action相对的type值,参数2:传递的数据 
  如下:
      store.dispatch({
          type: 'add',
          value: {
            id: 2
          }
      })
然后在store里面的action里面可以获取到 type和传入的value值,也可以在全局管理数据中的state改变全局的数据
7、在组件(页面)中也可以通过store. getState()来获取你存储的相对应的值,
8、store.subscribe()的操作是基本用来监听 store里面的一些数据变化进行操作的,需要主要的是dispatch的操作顺序,

总结

以上所述是小编给大家介绍的redux.js详解及基本使用,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
JQuery中的html()、text()、val()区别示例介绍
Sep 01 Javascript
node.js中的fs.exists方法使用说明
Dec 17 Javascript
浅析webapp框架AngularUI的demo
Dec 21 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
javascript如何实现暂停功能
Nov 06 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
jQuery实现获取h1-h6标题元素值的方法
Mar 06 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
Nov 27 Javascript
详解redux异步操作实践
Aug 15 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
javascript获取元素的计算样式
May 24 #Javascript
运用js实现图层拖拽的功能
May 24 #Javascript
了解javascript中let和var及const关键字的区别
May 24 #Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 #Javascript
小程序登录/注册页面设计的实现代码
May 24 #Javascript
微信小程序+云开发实现欢迎登录注册
May 24 #Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 #Javascript
You might like
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python实现电脑自动关机
2018/06/20 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
python搜索算法原理及实例讲解
2020/11/18 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
法学毕业生自荐信
2013/11/13 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
广告学专业求职信
2014/06/19 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2019年最新借条范本!
2019/07/08 职场文书
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript