Redux的核心知识
首先我们要知道Redux是什么
Redux是JavaScript的状态容器,它提供了可预测的状态管理。Redux可以运行在不同的环境下,不论是客户端、服务器端,还是原生应用都可以运行Redux。注意,Redux和React之间没有什么特别的关系,不要因为它们都是Re开头你就以为它们是有什么关联关系。不管你使用什么框架,Redux都可以作为一个状态管理器应用到这些框架上。
Redux的动机
当前端开发的应用变得越来越复杂的时候,随着各种框架的推出,单页面应用也层出不穷,这些应用的状态(state)也变得复杂起来。状态其实就是这个应用运行的时候需要的各种各样的动态数据,它们可能来自服务器端返回的数据、本地生成还没有持久化到服务器的数据、本地缓存数据、服务器数据加载状态、当前路由等。
管理这些不断的变化令人非常苦恼,改变一个model的时候可能会引起其他无法预料的副作用,比如说其他model的变化或者view的变化。state在何时、什么原因发生了改变都变得无法预测。
Redux正是视图解决这个问题、让state的变化可以预测的工具。它是如何做到的呢?先来看一下它提出的三大定律。
三大定律
- 单一数据源
整个应用的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'}}
}
- state是只读的
不能在state上面直接修改数据,改变state的唯一方法是触发action。action只是一个信息载体,一个普通的JavaScript对象。
这样确保了其他操作都无法修改state数据,整个修改都被集中处理,而且严格按顺序执行。
//使用dispatch触发store改变
store.dispatch({type: 'CREATE_POST',post: {id: 2, content: 'hello there'}
});
//使用getState方法返回当前state
store.getState();
- 使用纯函数执行修改
为了描述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的核心知识相关推荐
- Redux相关知识(什么是redux、redux的工作原理、redux的核心概念、redux的基本使用)(十一)
系列文章目录 第一章:React基础知识(React基本使用.JSX语法.React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state.props.refs)(二) 第 ...
- Vuex核心知识(2.0)
Vuex核心知识(2.0) 转自:http://www.cnblogs.com/ghost-xyx/p/6380689.html Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类 ...
- (万字长文)Spring的核心知识尽揽其中
来自:非科班的科班 Spring简介 Spring是开源的控制反转(Ioc)和面向切面编程(AOP)的容器框架,Spring的主要功能用于默认单例模式管理Bean对象.生产Bean.声明式事务.以及A ...
- java并发核心知识体系精讲_JAVA核心知识汇总
双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...
- python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系
原标题:最新版 17 幅思维导图:Python 编程之核心知识体系 导读:本文主要涵盖了 Python 编程的核心知识,展示了一系列思维导图,主要就 Python 核心基础知识进行了细致梳理.无论你是 ...
- 缓存核心知识小抄,面试必备,赶紧收藏!
缓存是为了减少数据库和服务器压力而产生的,在应用层编程时需主要考虑以下几种情况: 客户端缓存 服务端缓存 网络缓存(CDN缓存) 客户端缓存负责减轻服务端的存储和频繁的数据请求等压力. 例如,在QQ初 ...
- 搭建“双11”大型网站架构必须掌握的 5 个核心知识
2019独角兽企业重金招聘Python工程师标准>>> 每年电商双11大促对背后技术人都是一次大考,阿里数据库团队表示.经过9年的发展,双11单日交易额从2009年的0.5亿一路攀升 ...
- BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...
- python装饰器深度讲解_python核心知识讲解,干货!!!
大家好,为大家带来python中核心知识的讲解,不讲最基础的语法,这个大家都能轻松学会,不耽误时间,只有干货. ###查看当前作用域内的所有变量 >>>help('__main__' ...
最新文章
- Activity栈管理(二):Launch Mode
- 亿景WideLink系统与微软统一通信的整合
- axis2常用命令(wsdl2java)
- LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
- C#求空间两点之间的距离
- JS组件系列——Bootstrap Table 表格行拖拽
- Exchange 企业邮件与Windows安全应用 — Exchange 2007 收件人管理
- JavaScript对象学习笔记
- 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
- 终极破产的原因——20年玩儿钱与玩观念的的新经济
- Android——ImageView报错:不是可绘制对象(颜色或路径)
- 用JS让文章内容指定的关键字加亮
- 【Filter】基础知识
- 微信诈骗产业链,俩字儿是核心:杀熟
- matlab编译后方交会,摄影测量——后方交会(matlab
- 服务器摆放需要预留U位么_服务器机柜的尺寸你了解多少?“U”是在弱电中代表什么意思...
- 国产AT2401c完全替代RFX2401C直接兼容软件硬件
- 升级iOS 15后iPhone无法连接App Store怎么办?
- 基于Python的语音识别系统(孤立词)
- C语言 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
热门文章
- 学渣的刷题之旅 leetcode刷题 13.罗马数字转整数
- TDengine 入门教程⑧——数据库管理工具 | DBeaver 连接 TDengine
- 开源电商Sylius如何执行自动化测试
- 如何在Google搜索到我的网站?
- 期末计算机考试总结,计算机期末考试总结重点 吐血整理.doc
- [内网渗透]—NetLogon 域内提权漏洞(CVE-2020-1472)
- CSS单位px、em、rem及它们之间的换算关系
- 2.3 放大电路的分析方法
- 35去一线城市找工作_空间计算如何改变一线工作的现状
- 为实体提供枚举类型的支持