当前位置: 移动技术网 > IT编程>网页制作>CSS > redux基础源码解读

redux基础源码解读

2019年01月14日  | 移动技术网IT编程  | 我要评论

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。 } }

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网