redux基础源码解读
程序员文章站
2022-04-18 21:21:48
>
wodata1的博客...
>
redux 解读-
-->
redux 源码解读-
个人分类: reux 这里直接贴代码:...
redux 源码解读-
个人分类: reux 这里直接贴代码: export default function combinereducers(reducers) { // reducers : {} const reducerkeys = object.keys(reducers) // 获得传进来对象的key const finalreducers = {} // 声明finalreducers 这用来存储最终的reducers for (let i = 0; i < reducerkeys.length; i++) { // 这个循环是用来筛选数据的。 const key = reducerkeys[i] //获得key if (process.env.node_env !== 'production') { // 如果是生产环境 if (typeof reducers[key] === 'undefined') { // 如果reducers[key] 是 undefinded 抛出错误 warning(`no reducer provided for key "${key}"`) } } if (typeof reducers[key] === 'function') { // 筛选reducers【key】 如果是函数才保存 finalreducers[key] = reducers[key] } } const finalreducerkeys = object.keys(finalreducers) // 获得 finalreducers keys let unexpectedkeycache if (process.env.node_env !== 'production') { unexpectedkeycache = {} } let shapeassertionerror try { assertreducershape(finalreducers) // 判断finalreducers的合法性。 } catch (e) { shapeassertionerror = e } // 这里返回一个函数。这个函数就是传入到createstore的函数。 return function combination(state = {}, action) { console.log(shapeassertionerror); if (shapeassertionerror) { throw shapeassertionerror } if (process.env.node_env !== 'production') { const warningmessage = getunexpectedstateshapewarningmessage( // 判断数据的合法性 state, finalreducers, action, unexpectedkeycache ) if (warningmessage) { warning(warningmessage) } } let haschanged = false // 是否改变的flag const nextstate = {} // 存储最终的state for (let i = 0; i < finalreducerkeys.length; i++) { // 遍历 finalreducerkeys const key = finalreducerkeys[i] // 获得key const reducer = finalreducers[key] // 获得对应的reducer const previousstateforkey = state[key] // 获得key对应的state const nextstateforkey = reducer(previousstateforkey, action) // 获得根据key 改变后的state if (typeof nextstateforkey === 'undefined') { const errormessage = getundefinedstateerrormessage(key, action) throw new error(errormessage) } nextstate[key] = nextstateforkey // 将改变后的key 存储到 nextstate 对应的key haschanged = haschanged || nextstateforkey !== previousstateforkey // 判断是否改变,是否需要更新state } return haschanged nextstate : state // 如果改变了 返回新的state 没改变则返回旧state。 } }推荐阅读
-
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
-
jQuery选择器源码解读(二):select方法
-
jQuery选择器源码解读(一):Sizzle方法
-
jQuery选择器源码解读(三):tokenize方法
-
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
-
PHP网页游戏学习之Xnova(ogame)源码解读(九)
-
PHP网页游戏学习之Xnova(ogame)源码解读(五)
-
PHP网页游戏学习之Xnova(ogame)源码解读(四)
-
PHP网页游戏学习之Xnova(ogame)源码解读(七)
-
PHP网页游戏学习之Xnova(ogame)源码解读(十)