通过GitHub Blame深入分析Redux源码

2023-11-03

『 文章首发于GitHub Blog

说明

本文所分析的Redux版本为3.7.2

分析直接写在了注释里,放在了GitHub上 —> 仓库地址

分析代码时通过查看Github blame,参考了Redux的issue及PR来分析各个函数的意图而不仅是从代码层面分析函数的作用,并且分析了很多细节层面上写法的原因,比如:

  1. dispatch: (...args) => dispatch(…args) 为什么不只传递一个 action ?

  2. listener 的调用为什么从 forEach 改成了 for ?

  3. 为什么在 reducer 的调用过程中不允许 dispatch(action) ?

    ...

水平有限,有写的不好或不对的地方请指出,欢迎留issue交流?

文件结构

Redux的文件结构并不复杂,每个文件就是一个对外导出的函数,依赖很少,分析起来也比较容易,只要会用Redux基本上都能看懂本文。 这是Redux的目录结构:

.
├── applyMiddleware.js       将middleware串联起来生成一个更强大的dispatch函数,就是中间件的本质作用
├── bindActionCreators.js    把action creators转成拥有同名keys的对象
├── combineReducers.js       将多个reducer组合起来,每一个reducer独立管理自己对应的state
├── compose.js               将middleware从右向左依次调用,函数式编程中的常用方法,被applyMiddleware调用
├── createStore.js           最核心功能,创建一个store,包括实现了subscribe, unsubscribe, dispatch及state的储存
├── index.js                 对外export
└── utils                    一些小的辅助函数供其他的函数调用
   ├── actionTypes.js        redux内置的action,用来初始化initialState
   ├── isPlainObject.js      用来判断是否为单纯对象
   └── warning.js            报错提示

复制代码

源码分析

直接写在代码的注释里了,在每个函数上方也有大段的官方注释来解释每个函数的作用,中文翻译可以见Redux 中文文档

推荐源码的阅读顺序为:

index.js -> creatStore.js -> applyMiddleware.js (compose.js) -> combineReducers.js -> bindActionCreators.js
复制代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过GitHub Blame深入分析Redux源码 的相关文章

  • C语言实现strlen的三种方法

    目录 1 strlen介绍 strlen 求字符串长度 2 如何使用strlen库函数 3 三种方法实现strlen 计数器法 递归法 指针 指针法 4 关于strlen返回值 1 strlen介绍 strlen 求字符串长度 size t
  • Mac AndroidStudio“GradleBuildRunning”特别慢的解决方法

    在mac上每次运行app特别慢 setting gradle下面也没有离线模式 原来在gradle的侧边栏中
  • idea使用service注解后,编译运行报错 找不到符号 类 service

    使用service注解后找不到服务类 jar包也存在
  • vue和java的前后端请求

    GetMapping value url produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Forever Winter

    Forever Winter 题意 给一个像下面这样的图 要求第一圈分支和第二圈分支 下图的第一圈分支为5 第二圈分支为3 思路 求每个点的度 最内圈的分支的度是唯一的 找到即可 设为x 然后第二圈的分支为 n 1 x x n为总共节点上
  • 量化演示代码

    import numpy as np import copy def KL P Q out np sum P np log P Q return out def maxq value dynamic range np abs value m
  • C++一行输入多个数字(利用cin和空格)

    使用的方法颇为简单 利用了cin遇到空格就中断的特点 仅含有输入以及输出 欢迎大家一起交流 include
  • unity3d运行后自动暂停_在Unity中使用暂停的小技巧

    很多人在游戏中写暂停脚本的时候 经常会想到 Time timeScale 0 这种方法 但是 Time timeScale 只是能暂停部分东西 如果在 update 函数中持续改变一个物体的位置 这种位置改变貌似是不会受到暂停影响的 比如
  • 科学与AI之间的联系,许多AI的先驱科学家也是脑科学家

    从人工智能 artificial intelligence AI 发展的历史来看 我们可以清楚地看到脑科学与AI之间的联系 许多AI的先驱科学家也是脑科学家 使用显微镜发现的生物大脑的神经连接启发了人们对人工神经网络的研究 使用电子探测器发
  • 杭电OJ-ACM2036(改革春风吹满地)

    题目分析 原题给出的条件是通过多组数据的各个坐标 用逆时针表达 求出对应的 任意 多边形的面积大小 法一 Time Limit Exceeded Java版 主要思路 对一个多边形进行拆解 若含有n条边 记其坐标分别为 X0 Y0 X1 Y
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.

    更新镜像前是可以挂载的 使用SD卡更新成最新的debian系统镜像后就出现下面错误 mount home debian nfs rootfs bad option for several filesystems e g nfs cifs y
  • 下载bilibli网站视频

    https www videofk com bilibili video download bilibili https www videofk com bilibili video download search url https 3A
  • 第十届蓝桥杯 b组

    试题 A 组队 本题总分 5 分 作为篮球队教练 你需要从以下名单中选出 1 号位至 5 号位各一名球员 组成球队的首发阵容 每位球员担任 1 号位至 5 号位时的评分如下表所示 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多
  • 【Python】Python 3.11 无法安装 Pytorch ,提示找不到包

    问题 Python 3 11 无法安装 Pytorch 在 pytorch 界面找到语句 cmd 中输入 pip3 install torch torchvision torchaudio extra index url https dow
  • Django显示html网页中静态图片

    Django中显示html网页中静态图片 新建static文件夹 images文件夹 静态图片 检查setting py INSTALLED APPS列表中是否有django contrib staticfiles DEBUG 值是否为Tr
  • Spring事务注解实现的原理

    Spring事务注解是个典型的Spring AOP的注解 方法上面加上 Transactional 方法就有了事务的能力 面试中 基于动态代理讲更多的东西 为什么呢 gt 其实里面核心也是动态代理 在一个使用了ProfitDetailSer
  • c语言printf,scanf的各种用法及易错点

    scanf详解 声明 int scanf const char format argument 返回值 Return Value Both scanf and wscanf return the number of fields succe
  • 机器学习(五)

    一 数据降维 一 特征选择 特征选择是去除一些与预测结果没有关系或者两个特征有高度关联的特征作为机器学习接下来训练集 这里举个例子 预测狗的品种 这里有毛的颜色 有没有牙齿 眼睛颜色 显然有没有牙齿这一特征与预测结果没有关系 这里则需要将这
  • Nerf(Representing Scenes as Neural Radiance Fields for View Synthesis)代码复现笔记

    前言 本文旨在帮助小白快速了解or学习复现出Nerf的代码 整体结构保持不变 不过会针对部分细节为了更好理解进行了修改 本文会相应更新讲解视频于B站 id 出门吃三碗饭 有问题到b站评论区留言 同步更新于 公众号 AI知识物语 B站讲解视频

随机推荐

  • numpy笔记

    文章目录 1 创建numpy变量 2 numpy和list进行转换 3 创建全0全1的numpy对象 4 统计学应用 1 求和 2 均值 3 标准差 4 均方差 5 数据处理 1 数据查找 2 数据排序 3 获取不重复的元素 4 取最大最小
  • 七:以理论结合实践方式梳理前端 React 框架 ——— React 状态管理

    react 状态机制 虽然 react 前面使用通过创建一个 context 上下链接 对象 基于 Provider 供应者 Consumer 消费者 来进行数据的获取 但这种方式局限于只能读取数据 对数据的其他操作还是需要通过 props
  • webbench源码剖析

    Webbench是有名网站压力测试工具 它是由Lionbridge公司开发 http www lionbridge com Webbench能测试处在相同硬件上 不同服务的性能以及不同硬件上同一个服务的运行状况 webbench的标准测试可
  • 【HTML5】登录页面制作简易版

    刚开始学习Java 文件的命名 讲道理应该以英文为主 但是英语又不好 所以只好用拼音 最痛苦的应该算是那些英语又不好 又想秀一下的程序员 一半英语一半拼音 如mainFangFa 你说看了糟心不糟心 目录 1 form表单定义和用法 1 1
  • leetcode解题之200. Number of Islands Java版(岛屿的数量)

    200 Number of Islands Given a 2d grid map of 1 s land and 0 s water count the number of islands An island is surrounded
  • 流的操作

    流 流按照方向分 分为两种输入流和输出流 是以内存作为参照物 当从数据源中 将数据读取到内存中时 叫做输入流 也叫读取流将内存中的数据写入到数据源时 叫做输入流 也叫写入流 流按照传输的内容分 分为 字节流 字符流 对象流 无论是哪一种流
  • python---发送邮件(zmail)

    前言 前面介绍了smtplib的发送邮件方式 今天安静在介绍一种通过zmail来进行发送邮件 但是这个zmail目前只支持python3的版本 那么都在2202年了应该都用python3了吧 zmail zmail目前只支持python3的
  • Arduino esp8266-3.0.1 离线安装

    Arduino esp8266 1 arduino添加开发板 arduino左上角菜单 文件 gt 首选项 出来的设置窗口可以看到 附加开发板管理器网址 添加以下两个网址进去 https arduino esp8266 com stable
  • 栈(Stack)——(二)链式存储实现

    之前的头插法天然满足先进后出 后进先出这个特点 所以我们可以使用链表 设计时选择表头 作为栈顶指针 而不是表尾 单向链表 不含头节点 不同于线式存储 所以不需要作判满操作 链式存储实现代码如下 因为有bool变量 用了C 实现 mystac
  • Amos实操教程

    Amos实操教程 中介效应检验 1 相关概念 2 主界面及功能 3 中介效应 4 中介效应检验步骤 1 相关概念 Amos是什么 Amos的全名是Analysis of Moment Structures 由James L Arbuckle
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    国密算法概述 及算法的集成应用 sm2 sm3 sm4 一 概述 二 分类概述 3 1 SM1对称密码 3 2 SM2椭圆曲线公钥密码算法 3 3 SM3杂凑算法 3 4 SM4对称算法 3 5 SM7对称密码 3 6 SM9标识密码算法
  • 【满分】【华为OD机试真题2023 JAVA&JS】最优资源分配

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最优资源分配 知识点数组贪心 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某块业务芯片最小容量单位为1 25G 总容量为M 1 25G 对该芯片资源编号为1 2
  • win10 VS code 编译运行 C/C++的方法

    win10 VS code 编译运行 C C 的方法 具体配置过程如下链接 https zhuanlan zhihu com p 35178331 但中间出了点问题 CTRL ALT n 运行后 PS D C gt cd d C if gc
  • R语言apply()函数

    apply 函数是一种很强大的机制 apply 可把函数应用到数组的某个维度上 其函数的的一般格式为 apply x MARGIN FUN 其中 x为数据对象 MARGIN是维度的下标 FUN是由你指定的函 数 而 则包括了任何想传递给FU
  • Animator动画混合树

    Unity中的BlendTree BlendTree介绍 BlendTree BlendTree创建 一维混合 1D Blending 二维混合树 每个混合树的动画有一些要注意的地方 BlendTree介绍 Blend Tree用于多个动画
  • ScrollView简单自动滚动问题总结

    今天参考网上的资料写了一个简单的动画 刚开始的时候 确实困难重重 1 当我们在Activity里面获得View对象的时候 无论是getMeasuredHeight 还是getHehgit 方法 放在Activity里的onCreate on
  • 联想拯救者r720自带win10安装linux(ubuntu)双系统

    联想拯救者R720自带win10安装linux ubuntu 双系统 准备事项 ubuntu的u盘启动 网上有教程 下个比较新的版本 本人用的ubuntu16 04 关闭win10的快速启动 也可以不关闭 不关闭的话可能会导致以后ubunt
  • 规律化递归

    递归思想 具体案例 package Java project 1 import java util Scanner public class RecursionDemo public static void main String args
  • k8s知识点拾遗

    目录 Headless和Service ClusterIP模式 Headless模式 Deployment 简述 更新Deployment 回退Deployment Deployment扩容 暂停和恢复Deployment 编写Deploy
  • 通过GitHub Blame深入分析Redux源码

    文章首发于GitHub Blog 说明 本文所分析的Redux版本为3 7 2 分析直接写在了注释里 放在了GitHub上 gt 仓库地址 分析代码时通过查看Github blame 参考了Redux的issue及PR来分析各个函数的意图而