redux 的三大原则

redux 的开发和使用必须要遵循三大原则,即:

  1. 单一数据源:整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个 store 中
  2. State 是只读的:唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。
  3. 使用纯函数来执行修改: 为了描述 action 如何改变 state tree ,你需要编写 reducers

关于第一点很容易理解,整个应用应当只有一个 store,全局唯一的 store 有利于更好的管理全局的状态,方便开发调试,对实现“撤销”、“重做”这类的功能也更加方便。

第二点,state 是只读的,因此,我们在任何时候都不应该直接修改 state,唯一能改变 state 的方法就是通过 dispatch 一个 action,间接的来修改,以此来保证对大型应用的状态进行有效的管理。

第三点,要想修改 state,必要要编写 reducer 来进行,reducer 必须是纯函数,reducer 接收先前的 stateaction,并且返回一个全新的 state

什么是纯函数?

前面我们介绍 redux 三大原则的时候提到过,修改 state 要编写 reducer,且 reducer 必须是一个纯函数,那么问题来了,什么是纯函数呢?

维基百科里是这么定义纯函数的:

在程序设计中,若一个函数符合以下要求,则它可能被认为是纯函数:

  • 此函数在相同的输入值时,需产生相同的输出。函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产生的外部输出无关。
  • 该函数不能有语义上可观察的函数副作用,诸如“触发事件”,使输出设备输出,或更改输出值以外物件的内容等。

简单总结一下,如果一个函数的返回结果只依赖他的参数,并且在执行过程中没有副作用,我们就把这个函数定义为纯函数

举个

redux你用对了吗?相关推荐

  1. operate函数_跟着 redux 学 compose组合函数

    ▲ 点击上方蓝字关注我 ▲ 把你的心 我的心串一串 串一株幸运草 串一个同心圆 文 / 景朝霞 来源公号 / 朝霞的光影笔记 ID / zhaoxiajingjing 目录0 / 热热身1 / red ...

  2. Redux 入门教程(三):React-Redux 的用法

    前两篇教程介绍了 Redux 的基本用法和异步操作,今天是最后一部分,介绍如何在 React 项目中使用 Redux. 为了方便使用,Redux 的作者封装了一个 React 专用的库 React-R ...

  3. Redux 入门教程(二):中间件与异步操作

    上一篇文章,我介绍了 Redux 的基本做法:用户发出 Action,Reducer 函数算出新的 State,View 重新渲染. 但是,一个关键问题没有解决:异步操作怎么办?Action 发出以后 ...

  4. Redux 入门教程(一):基本用法

    一年半前,我写了<React 入门实例教程>,介绍了 React 的基本用法. React 只是 DOM 的一个抽象层,并不是 Web 应用的完整解决方案.有两个方面,它没涉及. 代码结构 ...

  5. Koa2和Redux中间件源码研究

    一.Koa2中间件源码分析 在Koa2中,中间件被存放在一个数组中. 使用koa中,最常见的就是app.use(fn),use函数部分源码如下所示.首先中间件必须是个函数.若是generator函数, ...

  6. React+Redux+中间件

    MVVM是Model-View-ViewModel的缩写.mvvm是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI 组件,它负责将数据模 ...

  7. redux rxjs_可观察的RxJS和Redux入门指南

    redux rxjs Redux-Observable is an RxJS-based middleware for Redux that allows developers to work wit ...

  8. redux logic_Redux-Logic简介

    redux logic by Sam Ollason 通过萨姆·奥拉森(Sam Ollason) Redux-Logic简介 (An Introduction to Redux-Logic) This ...

  9. 使用Typescript的巧妙React上下文技巧-不是Redux

    by Bill Girten 比尔·吉尔滕(Bill Girten) 使用Typescript的巧妙React上下文技巧- 不是 Redux (Clever React context tricks ...

  10. redux 局部刷新_如何使用Redux Observables和刷新令牌API获取新的访问令牌

    redux 局部刷新 by Sachin Kumar 由Sachin Kumar 如何使用Redux Observables和刷新令牌API获取新的访问令牌 (How to get a new acc ...

最新文章

  1. AC日记——小书童——刷题大军 洛谷 P1926
  2. 值得安利!推荐7款让人眼前一亮的宝藏软件
  3. [Hadoop] Error: JAVA_HOME is not set
  4. 缓冲区溢出-基本ROP-ret2syscall
  5. 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
  6. 飞鸽传书下载最新版2013
  7. 光引发剂主要用途_光引发剂分类及用途
  8. Java面试题300道
  9. 怎么将表中的空格都转变为0???
  10. Talib技术因子详解(七)
  11. 高级语言程序设计(C语言)----第一章 概述
  12. A轮、B轮、C轮融资、VC、PE、IPO概念解析
  13. 第十一章.软件工程(上)
  14. 初识python之汇率转换篇
  15. 网站安全扫描工具,举荐6个网站安全扫描工具
  16. 【渝粤题库】国家开放大学2021春1089现代教育思想题目
  17. 什么是等保三级?等保三级的认证流程有哪些?
  18. 打计算机游戏用英语怎么说,打游戏用英语怎么说
  19. 自定义CKeditor上传图片按钮
  20. Spring学习(二)—— 对象创建方式及依赖注入

热门文章

  1. (嵌入式)I2C温湿度采集
  2. Kafka-Eagle 安装到使用全教程
  3. do msgbox loop_do第三人称单数形式怎么写
  4. CCRC认证和ISO27001认证有哪些不同?企业该如何申请?
  5. 自然辩证法 题目1
  6. Stale branches 设置_一文弄懂!Word页眉页脚设置,So easy~
  7. 不动点迭代法(Fixed Point Iteration)迭代求根的python程序
  8. 留学必备物品清单,这3类你一定要带
  9. 可尾游标(Tailable Cursors)
  10. python识别花草_荐 【python】TensorFlow框架下CNN神经网络的花卉识别系统