IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Redux源码分析——3,创建Store -> 正文阅读

[JavaScript知识库]Redux源码分析——3,创建Store

创建Store

大多数还是报错。我们不用关心报错。

//ps和e都是函数,报错。
//e和参数四是函数,报错。
if (
	(typeof preloadedState === 'function' && typeof enhancer === 'function') ||
	(typeof enhancer === 'function' && typeof arguments[3] === 'function')
) {
	throw new Error(
		'It looks like you are passing several store enhancers to ' +
		'createStore(). This is not supported. Instead, compose them ' +
		'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.'
	)
}
//ps是函数,没有e。
//ps赋值给e。清除ps。
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
	enhancer = preloadedState as StoreEnhancer<Ext, StateExt>
	preloadedState = undefined
}
//e有,不是函数,报错。
if (typeof enhancer !== 'undefined') {
	if (typeof enhancer !== 'function') {
		throw new Error(
			`Expected the enhancer to be a function. Instead, received: '${kindOf(
				enhancer
			)}'`
		)
	}
	//调用e。
	return enhancer(createStore)(
		reducer,
		preloadedState as PreloadedState<S>
	) as Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext
}
//reducer不是函数,报错。
if (typeof reducer !== 'function') {
	throw new Error(
		`Expected the root reducer to be a function. Instead, received: '${kindOf(
			reducer
		)}'`
	)
}
let currentReducer = reducer
let currentState = preloadedState as S
let currentListeners: (() => void)[] | null = []
let nextListeners = currentListeners
let isDispatching = false

1,如果有e,而且是函数。调用它。

调用e,参数是当前方法。返回值是个函数,继续调用它。
e相当于是一个createStore。
会跳过后续步骤。

return enhancer(createStore)(
	reducer,
	preloadedState as PreloadedState<S>
) as Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext

2,状态预热。

reducer,初始状态,订阅者数组。

let currentReducer = reducer
let currentState = preloadedState as S
let currentListeners: (() => void)[] | null = []

3,next赋值current。

let nextListeners = currentListeners

4,关闭标记。

let isDispatching = false

阶段总结

1,双缓冲机制

每次current复制一份给next。

next:负责修改。
添加和移除,都是操作它。

current:负责查询。
查询时,next赋值给current,然后遍历current。

2,标记管理

isDispatching:是否正在操作中。
每次dispatch时,打开它。
操作完毕,关闭它。
其他操作时,只要true就报错。

isSubscribed:订阅状态。
如果true,表示还没取消。
只有true时才进行取消操作。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:27:56  更:2022-03-22 20:28:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:43:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码