【目录结构】

image-20190827201059192

Redux 源码可以在任意项目中的 node_modules 文件夹下的 redux 中找到。我们阅读学习中主要关注 src 即可。

src 下主要分成两个部分, 一部分是 utils 工具库, 一部分是 redux 逻辑代码。

【utils】

Redux 自定义的工具库

下属对应三个文件

  • actionTypes.js
  • isPlainObject.js
  • warning.js

actionTypes.js

源码如下:

const randomString = () =>
  Math.random()
    .toString(36)
    .substring(7)
    .split('')
    .join('.')

const ActionTypes = {
  INIT: `@@redux/INIT${randomString()}`,
  REPLACE: `@@redux/REPLACE${randomString()}`,
  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}

export default ActionTypes

这个文件主要是用来对外暴露三个 action 类型,比较好理解。

其中的 randomString 方法用来获取指定长度的随机字符串, 这里有个很多同学都会忽略掉的知识点, Number.prototype.toString 方法 接受一个可选参数 radix ,该参数代表数字的基数, 也就是我们常数的二进制、八进制等, 默认为 10, 范围在 2~36之间。

isPlainObject.js

源码如下:

export default function isPlainObject(obj) {
  
  if (typeof obj !== 'object' || obj === null) return false
  
  let proto = obj
  
  while (Object.getPrototypeOf(proto) !== null) {
    proto = Object.getPrototypeOf(proto)
  }
  
  return Object.getPrototypeOf(obj) === proto
}

这个文件对外暴露一个用来判断是否为简单对象的方法。

简单对象

凡不是new Object()或者字面量的方式构建出来的对象都不是简单对象

就是该对象的 __proto__ 等于 Object.prototype

版权声明:本文为vant850原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/vant850/p/11425287.html