2014养老金上调细则,爱宝网,探秘胸膜比赛后台全过程
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。 } }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!!
点击进行留言回复
相关文章:
-
-
-
详解CSS3新增的背景属性
CSS3新增属性:background-clip ,background-origin , background-size,本文给大家分享CSS3新增的背景属性...
[阅读全文]
-
-
-
CSS3 旋转立方体问题详解
这篇文章主要介绍了CSS3 旋转立方体问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学...
[阅读全文]
-
Grid 宫格常用布局的实现
这篇文章主要介绍了Grid 宫格常用布局的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学...
[阅读全文]
-
-
-
CSS3实现网站商品展示效果图
这篇文章主要介绍了CSS3实现网站商品展示效果图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习...
[阅读全文]
-
网友评论