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 ...
随机推荐
- MacBook Air在macOS Mojave和macOS Seirra系统下使用Loopback在OBS Studio推流时输出系统软件声音
转载请标注原地址:https://www.cnblogs.com/lixiaojing/p/11440533.html 运行环境: Loopback破解版获取: https://pan.baidu.c ...
- Java 8 stream 经典示例
package org.study2.java8.stream; import org.junit.Test; import java.util.*; import java.util.stream. ...
- 【VS开发】Visual C++内存泄露检测—VLD工具使用说明
Visual C++内存泄露检测-VLD工具使用说明 一. VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的 ...
- vscode添加vue文件模板
文件->首选项->用户代码片段->输入vue,打开vue.json 添加模板json "Print to console": { "prefix&quo ...
- 【转】Ubuntu环境搭建svn服务器
记录一次使用Ubuntu环境搭建svn服务器的详细步骤 一.查看是否已经安装svn 命令:svn如果显示以下信息,说明已安装 二.卸载已安装的svn 命令:sudo apt-get remove -- ...
- 使用qmlscene命令来快速查看编辑的qml文件的实际效果图
一片金灿灿的树叶落下来,仿佛飞来了许许多多翩翩起舞的黄蝴蝶. Qt SDK 提供 了 一个 命令行 环境, 给那些 有 特殊 需求 的 开发者, 方便 他们 在 不 使用 Qt Creator 集成 ...
- 【转帖】处理器史话 | 当Power架构的发展之路遭遇“滑铁卢”
处理器史话 | 当Power架构的发展之路遭遇“滑铁卢” https://www.eefocus.com/mcu-dsp/366740 (8)Power8:决定了 Power 平台的未来发展 2014 ...
- [HAOI2008]硬币购物-题解
传送门 解答 根据容斥原理 \[ \left|\bigcap_{i=1}^n \overline{S_i}\right| = |U| - \left|\bigcup_{i=1}^n S_i\right ...
- Fedora30 install VS Code
We currently ship the stable 64-bit VS Code in a yum repository, the following script will install t ...
- Django之拾遗
一.设计模式 1.1 MVC 模型(M)是数据的表述,非真正数据,而是数据接口. 视图(V)是你看到的界面,是模型的表现层,此外还提供了收集用户输入的接口. 控制器(C)控制模型和视图之间的信息流动. ...