首先我们要知道Redux是什么

Redux是JavaScript的状态容器,它提供了可预测的状态管理。Redux可以运行在不同的环境下,不论是客户端、服务器端,还是原生应用都可以运行Redux。注意,Redux和React之间没有什么特别的关系,不要因为它们都是Re开头你就以为它们是有什么关联关系。不管你使用什么框架,Redux都可以作为一个状态管理器应用到这些框架上。

Redux的动机

当前端开发的应用变得越来越复杂的时候,随着各种框架的推出,单页面应用也层出不穷,这些应用的状态(state)也变得复杂起来。状态其实就是这个应用运行的时候需要的各种各样的动态数据,它们可能来自服务器端返回的数据、本地生成还没有持久化到服务器的数据、本地缓存数据、服务器数据加载状态、当前路由等。
管理这些不断的变化令人非常苦恼,改变一个model的时候可能会引起其他无法预料的副作用,比如说其他model的变化或者view的变化。state在何时、什么原因发生了改变都变得无法预测。
Redux正是视图解决这个问题、让state的变化可以预测的工具。它是如何做到的呢?先来看一下它提出的三大定律。

三大定律

  1. 单一数据源
    整个应用的state存储在一个JavaScript对象中,Redux用一个称为store的对象来存储整个state。比如,在Deskmark添加上用户的概念的话,我们可以设计一个这样的结构来存储所以数据:
{posts: {isLoading: false,items: {{id: 1, content: 'hello world'}}},user: {isLoading: false,userInfo: {name: 'viking',email: 'viking@me.com'}}
}
  1. state是只读的
    不能在state上面直接修改数据,改变state的唯一方法是触发action。action只是一个信息载体,一个普通的JavaScript对象。
    这样确保了其他操作都无法修改state数据,整个修改都被集中处理,而且严格按顺序执行。
//使用dispatch触发store改变
store.dispatch({type: 'CREATE_POST',post: {id: 2, content: 'hello there'}
});
//使用getState方法返回当前state
store.getState();
  1. 使用纯函数执行修改
    为了描述action怎样改变state,需要编写reducer来规定修改的规则。
    reducer是纯函数,接收先前的state和处理的action,返回新的state。reducer可以根据应用的大小拆分成多个,分别操控state的不同部分。
    纯函数的好处是它无副作用,有什么样的输入就有什么样的输出。比如说数组的reduce方法就是一个reducer。
//这就是一个reducer,负责处理action,返回新的state
function posts(state = [], action) {switch (action.type) {case 'CREATE_POST':return [...state, action.post];default:return state;}
}

Redux的核心知识相关推荐

  1. Redux相关知识(什么是redux、redux的工作原理、redux的核心概念、redux的基本使用)(十一)

    系列文章目录 第一章:React基础知识(React基本使用.JSX语法.React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state.props.refs)(二) 第 ...

  2. Vuex核心知识(2.0)

    Vuex核心知识(2.0) 转自:http://www.cnblogs.com/ghost-xyx/p/6380689.html Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类 ...

  3. (万字长文)Spring的核心知识尽揽其中

    来自:非科班的科班 Spring简介 Spring是开源的控制反转(Ioc)和面向切面编程(AOP)的容器框架,Spring的主要功能用于默认单例模式管理Bean对象.生产Bean.声明式事务.以及A ...

  4. java并发核心知识体系精讲_JAVA核心知识汇总

    双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...

  5. python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系

    原标题:最新版 17 幅思维导图:Python 编程之核心知识体系 导读:本文主要涵盖了 Python 编程的核心知识,展示了一系列思维导图,主要就 Python 核心基础知识进行了细致梳理.无论你是 ...

  6. 缓存核心知识小抄,面试必备,赶紧收藏!

    缓存是为了减少数据库和服务器压力而产生的,在应用层编程时需主要考虑以下几种情况: 客户端缓存 服务端缓存 网络缓存(CDN缓存) 客户端缓存负责减轻服务端的存储和频繁的数据请求等压力. 例如,在QQ初 ...

  7. 搭建“双11”大型网站架构必须掌握的 5 个核心知识

    2019独角兽企业重金招聘Python工程师标准>>> 每年电商双11大促对背后技术人都是一次大考,阿里数据库团队表示.经过9年的发展,双11单日交易额从2009年的0.5亿一路攀升 ...

  8. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  9. python装饰器深度讲解_python核心知识讲解,干货!!!

    大家好,为大家带来python中核心知识的讲解,不讲最基础的语法,这个大家都能轻松学会,不耽误时间,只有干货. ###查看当前作用域内的所有变量 >>>help('__main__' ...

最新文章

  1. Activity栈管理(二):Launch Mode
  2. 亿景WideLink系统与微软统一通信的整合
  3. axis2常用命令(wsdl2java)
  4. LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
  5. C#求空间两点之间的距离
  6. JS组件系列——Bootstrap Table 表格行拖拽
  7. Exchange 企业邮件与Windows安全应用 — Exchange 2007 收件人管理
  8. JavaScript对象学习笔记
  9. 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
  10. 终极破产的原因——20年玩儿钱与玩观念的的新经济
  11. Android——ImageView报错:不是可绘制对象(颜色或路径)
  12. 用JS让文章内容指定的关键字加亮
  13. 【Filter】基础知识
  14. 微信诈骗产业链,俩字儿是核心:杀熟
  15. matlab编译后方交会,摄影测量——后方交会(matlab
  16. 服务器摆放需要预留U位么_服务器机柜的尺寸你了解多少?“U”是在弱电中代表什么意思...
  17. 国产AT2401c完全替代RFX2401C直接兼容软件硬件
  18. 升级iOS 15后iPhone无法连接App Store怎么办?
  19. 基于Python的语音识别系统(孤立词)
  20. C语言 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

热门文章

  1. 学渣的刷题之旅 leetcode刷题 13.罗马数字转整数
  2. TDengine 入门教程⑧——数据库管理工具 | DBeaver 连接 TDengine
  3. 开源电商Sylius如何执行自动化测试
  4. 如何在Google搜索到我的网站?
  5. 期末计算机考试总结,计算机期末考试总结重点 吐血整理.doc
  6. [内网渗透]—NetLogon 域内提权漏洞(CVE-2020-1472)
  7. CSS单位px、em、rem及它们之间的换算关系
  8. 2.3 放大电路的分析方法
  9. 35去一线城市找工作_空间计算如何改变一线工作的现状
  10. 为实体提供枚举类型的支持