React笔记 combineReducers函数

在React中,我们当有大量数据需要管理我们理所应当的想到使用redux来管理我们的数据。但是一个项目中肯定是不只有一个reducer的,而很可能每个页面都有一个自己的reducer,而怎么将这些子reducer整合到一个reducer中呢。这个时候就需要用到 combineReducers 函数了。

使用方法很简单,只需要将子reducer导入,并且从redux-immutable库中引入combineReducers函数,combineReducers函数接收一个对象,这个对象就是子reducer以及它的key,将所有子reducer传入后,再将整个reducer导出即可。
在这里插入图片描述
在combineReducers函数的核心就是根据我们传入的action来判断当前的state有没有发生改变,如果发生了改变就返回新的state,如果没改变就用原来的state。

接下来看看combineReducers函数的内部是怎么操作的

首先是拿到传入的所有reducer的key,并且遍历所有的key,当这个key的值是一个函数时才把值放到finalReducers中,然后将所有的key存放在finalReducerKeys中。
在这里插入图片描述

然后返回combination函数,这个函数就是真正调用combineReducers函数的核心。
在这个函数中,首先定义了一个hasChanged来识别数据是否发生改变。然后定义个空对象nextState来存放新的state,再通过遍历上面拿到的finalReducerKeys进行进一步的操作,拿到遍历的key、reducer、previousStateForKey就是原来传进来的state。
在这里插入图片描述

然后将原来的值state跟action传给reducer,reducer就是我们传入的函数,返回给nextStateForKey。如果 nextStateForKey值为undefined则回抛出异常。
在这里插入图片描述

随后将nextStateForKey保存到nextState的key属性中,然后判断hasChanged的值,如果新的nextStateForKey不等于原来的previousStateForKey的值,就返回新的state,也就是nextState,如果相等则返回原来的state

在这里插入图片描述
总结:combineReducers函数就是将我们传入的reducers合并到一个对象中,最终返回一个combination的函数,其实就是根据传入的action来判断当前的state有没有发生改变,如果发生改变则返回改变了的新state,如果没发生改变则返回原来的state。新的state会触发订阅者发生对应的刷新,而旧的state可以有效的组织订阅者发生刷新。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值