redux源码解析

1、首先让我们看看都有哪些内容


2、让我们看看redux的流程图

  

  Store:一个库,保存数据的地方,整个项目只有一个

      创建store

      Redux提供 creatStore 函数来生成 Store

// 引入redux
import { createStore } from 'redux'; //创建Store 需要传递一个函数fn 这里的fn是之后会提及的reducers
const store = createStore(fn);

  State:状态,某时刻的数据即是Store的状态

      获取状态的方法是store.getState()

  Action:行为,它有一个不可或缺的type属性

      action还可以携带其他内容

      我们可以使用action来改变State的值,

      从而将我们需要的数据通过Action“运输”到 Store;

  dispatch:发送action

      dispatch(action)接受一个action对象为参数,并将它发送出去,

      Store接受Action,接受之后需要返回一个新的State(状态)

  Reducer:处理器    

      dispatch(action)接受一个action对象为参数,并将它发送出去,

      Store接受Action,接受之后需要返回一个新的State(状态)

      而创建这个新的状态的过程就是reducer


3、从isPlainObject.js开始

/**
* @param {any} obj The object to inspect.
* @returns {boolean} True if the argument appears to be a plain object.
*/
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
}

  · 这个函数的核心思想在于什么呢?

  在于判断一个值是否为一个普通的对象

  此处的普通对象指的是直接通过字面量(let obj={})或者new Object()创建出来的对象

  · 那么他是怎么做判断的呢?

if (typeof obj !== 'object' || obj === null) return false

  这行代码排除掉肯定不是对象的值

注意:typeof null 的返回值为 "object". 所以只使用 typeof obj !== 'object' 不能将 null 值排除掉. 
因此应使用 typeof obj !== 'object' || obj === null 进行判断.

  再往下就是通过原型链判断了.

  通过 while 不断地判断 Object.getPrototypeOf(proto) !== null 并执行,

  最终 proto 会指向 Object.prototype. 这时再判断 Object.getPrototypeOf(obj) === proto,

  如果为 true 的话就代表 obj 是通过字面量或调用 new Object() 所创建的对象了.

  Object.getPrototypeOf() 方法用于获取一个对象的原型属性指向的是哪个对象.

举个												

redux源码解析(深度解析redux+异步demo)的更多相关文章

  1. 深入源码,深度解析Java 线程池的实现原理

    java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU.内存.磁盘.网 ...

  2. Redux源码分析之bindActionCreators

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  3. Redux源码分析之combineReducers

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  4. 手把手教你撸一套Redux(Redux源码解读)

    Redux 版本:3.7.2 Redux 是 JavaScript 状态容器,提供可预测化的状态管理. 说白了Redux就是一个数据存储工具,所以数据基础模型有get方法,set方法以及数据改变后通知 ...

  5. Redux源码分析之applyMiddleware

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  6. Redux源码分析之createStore

    接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...

  7. Redux源码分析之基本概念

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  8. Redux源码分析之compose

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  9. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...

随机推荐

  1. webbench高并发测试

    安装ctags sudo apt-get install ctags 安装webbench 下载webbench http://home.tiscali.cz/~cz210552/distfiles/ ...

  2. 关于JavaScript和Java的区别和联系

    转载自: Javascript和Java除了名字和语法有点像,其他没有任何的关系. 做个比较是为了让大家更好的理解Javascript,事实上,两种语言根本没有可比性,是完全不同的.   Javasc ...

  3. Java HashMap 遍历、删除、排序

    首先创建一个map对象,并依次放入几个测试数据 HashMap<String, Integer> map = new HashMap<String, Integer>(); m ...

  4. discuz的学习和部署

    1.http://jingyan.baidu.com/article/b87fe19eb57ff252183568d9.html 下载好后安装一个mysql, 2.

  5. Appium解决搜索框问题

    appium解决搜索框: 1. 点击搜索,手工测试会弹出键盘,需要点击键盘上的搜索按钮. 2.但自动化的时候,键盘不能弹出.所以我们可以用回车等keycode代替搜索按钮. Press Keycode ...

  6. tchart...

    using System;using System.Collections;using System.ComponentModel;using System.Drawing; using System ...

  7. TCHART类型

    private Steema.TeeChart.Styles.Pie pieSeries1; private Steema.TeeChart.Styles.Pie pieSeries2; privat ...

  8. Google Bazel简介

    最近跑一个代码,需要用到Bazel. Bazel

  9. px em rem 区别

    PX:PX实际上就是像素,用PX设置字体大小时,比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,如果改变了浏览器的缩放,这时会使用我们的Web页面布局被打破.这样 ...

  10. Docker 只要一小时,零基础入门Docker(转)

    转自:https://zhuanlan.zhihu.com/p/23599229 推荐:https://hijiangtao.github.io/2018/04/17/Docker-in-Action ...