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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
jquery控制select的text/value值为选中状态
Jun 03 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
vue项目引入Iconfont图标库的教程图解
Oct 24 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 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生成html分页列表的代码
2007/03/18 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
php封装一个异常的处理类
2017/06/08 PHP
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python实现序列化及csv文件读取
2020/01/19 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
财务经理的岗位职责
2013/12/17 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
文秘自荐信
2014/06/28 职场文书
小学捐书活动总结
2014/07/05 职场文书
反邪教观后感
2015/06/11 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
css3 选择器
2022/05/11 HTML / CSS