redux的理解
Redux
这里介绍下我对Redux的理解,不涉及如何使用Redux。
Redux 官网介绍: A predictable state container for JavaScript apps.(一个可预测的状态容器for js 应用)
可以看出最亮眼的就是可预测,是个啥呢?是个状态容器
那么首先它是个状态容器,状态容器解决了什么问题呢?
- 解决了react中组件间通信问题,比如:好几个组件公用数据,一个组件要改变另外一个组件的数据,一个组件需要改变全局状态等这些场景。
如果你的应用比较简单,那就完全可以不用Redux,Redux 的创造者 Dan Abramov 说:
只有遇到 React 实在解决不了的问题,你才需要 Redux 。
可预测指的是什么?
- 可预测指的是,知道一个动作之后,会发生什么。因Redux,你清楚的知道什么发生了改变(action),改变之后的数据是什么样的(store/state),以及发生了哪些改变(Redux-devtool 中的 action 记录)。
是怎么做到可预测的?
- 单一数据源,应用只能有一个store
- 所有数据都是只读的,要想修改数据,必须 dispatch 一个 action 来描述什么发生了改变
- 当处理 action 时,必须生成一个新的 state,不得直接修改原始对象
Redux的设计思想是?
- Web 应用是一个状态机,视图与状态是一一对应的。
- 所有的状态,保存在一个对象里面。
Redux之Reducer 纯函数
也就是说,只要是同样的输入,必定得到同样的输出。由于 Reducer 是纯函数,就可以保证同样的State,必定得到同样的 View,因此Reducer里不能改变state,必须返回一个全新的state对象。
纯函数是函数式编程的概念,必须遵守以下一些约束:
不得改写参数
不能调用系统 I/O 的API
不能调用Date.now()或者Math.random()等不纯的方法,因为每次会得到不一样的结果
redux的理解的更多相关文章
- redux深入理解之中间件(middleware)
理解reduce函数 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initi ...
- 对于Redux的理解
在移动端项目,经常会在不同view中进行传递数据,事件.当事件比较少时,我们可以通过常规的事件流方法,注册,发布事件 进行响应等等.但是项目中一个事件多处响应时候,就会使程序变得相当复杂.在现在的Vu ...
- fish redux 个人理解
fish redux 理解 fish redux是什么 Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复杂应用. 它的特点是配置式 ...
- 对redux的理解
redux原理 某公司有物流(actionType).电商(actionType).广告(actionType)3块业务,在公司财务系统(state)统一记录着三块业务分别赚取到的资金.某天,电商业 ...
- redux 初步理解
派发一个 action 给 reducer, reducer 生成了一个新的 state; redux 通过 Store 来保存数据, store.getState 获得数据, 而要更新 state, ...
- Redux 和 Redux thunk 理解
1: state 就像 model { todos: [{ text: 'Eat food', completed: true }, { text: 'Exercise', completed: fa ...
- Redux简易理解
1. createStore(相当于vuex的$store) 这才是数据存储仓库,用来存储初和输出的数据,更vuex$store功能一样 作用: 创建一个 Redux store 来以存放应用中所有 ...
- Redux 架构理解
Redux 是一种前端“架构模式”,是 Flux 架构的一种变种,用来提供可预测的状态管理.虽然经常和 React 一起被提及,但是 Redux 却不仅仅只能用于 React,还可以将其运用到其他前端 ...
- react中redux的理解
定义 redux可以看作是flux的进阶版,主要用于react中公共状态(数据)的管理 redux底层原理 redux有一个createStore方法,这个方法用户创建公共存储空间,createSto ...
随机推荐
- Servlet相关的几种乱码
1. 页面中文显示乱码 原因: response中的内容会先输入到response缓冲区,然后再输入到传给浏览器,所以要将缓冲区和浏览器的编码都设置成utf-8 1)未使用jsp,而是在servlet ...
- Unity3d客户端与Photon服务器数据通信
今天先介绍一下Photon服务器是什么,可以做什么,为什么要使用它? Photon:开发多人联网游戏最轻松的方案!可以迅速简单实现多人实时在线网络游戏(pvp). Photon:透过位于各地的Phot ...
- Service与Activity通信 回调方式***
要实现service与activity的高强度通信用什么方法? service与activity之前的通信方式有很多,回调接口方式.观察者模式.广播.还有handler等,方法有很多,但要高强度地通信 ...
- openstack错误问题定位及调试
- PLSQL Developer连接远程oracle配置(详细解读)
转自:https://blog.csdn.net/zhige_j/article/details/80832654 一.安装Instant Client 1. 下载Instant Client(轻量级 ...
- Mysql 插入自增的最大版本号
有一个需求,在历史表中,一条数据,在最大版本号上进行自增 INSERT Biz_CourseStudyHistory ( contentStudyID, courseWareID, versionNO ...
- (1)PyCharm开发工具安装Flask并创建helloworld程序
一.环境描述 1.操作系统:windows7 2.编程语言:python3.6 下载地址:https://www.python.org/downloads/windows/ 3.虚拟化环境:virtu ...
- mysql 中 int 等类型如何选择
详见:https://blog.csdn.net/samll_snail/article/details/86534719 .
- Spring cloud微服务安全实战-7-7自定义metrics监控指标(2)
Gauge用来显示单词一个数的 勾选,这里编程仪表盘 设置仪表盘的最大值.最小值 保存 直接保存 保存成功的提示 返回 这就是我们做的一个简单的仪表盘 这个不适合我们的counter,因为没有最大值 ...
- [Bayes] Metropolis-Hastings Algorithm
[Bayes] prod: M-H: Independence Sampler for Posterior Sampling dchisq gives the density, ...