redux学习-自定义redux库createStore,combineReducers

redux模块对象:createStore, combineReducers
A. createStore

  1. createStore(reducer) : 接收一个reducer函数,返回一个store对象
  2. store对象:
    getState() 得到内部state对象
    dispatch(action) 分发action,触发reducer调用,返回一个新的state,调用所有绑定的listener
    subscribe(listener) 订阅一个state监听器
	function createStore(reducer) {
		//内置一个state对象
		let  state
		//内部保存n个listener的数组
		let listeners = []
		//初始化state并且保存
		state = reducer(state, {type:'@mini-redux'})
		//得到内部管理的state对象
		function getState(){
			return state
		}
		//订阅一个state监听器
		function subscribe(listener){
			return listeners.push(listener)
		}
	  	//分发action,会触发reducer调用,返回一个新的state,调用所有绑定的listener
		function dispatch(action){
			//调用reducer,返回新的state并保存
			state = reducer(state,action)
			//调用listeners中所有监视的回调函数
			listeners.forEach(listener => {
				listener ()
			})
		}

	return {getState, dispatch, subscribe}
}

B. combineReducers
1.接收一个包含多个reducer函数的对象,返回一个reducer函数

	function combineReducers(reducers) {
		//reducers = {msg:msgReducer,say:sayReducer}
		//获取object键名
		let keys = Object.keys(reducers)
		return function (state = {}, action) {
			let newState={}
			keys.forEach(key => {
				//获取每一个reducer
				const childReducer = reducers[key]
				//获取每一个reducer对应的state
				const childState = state[key]
				const childNewState = childReducer(childState, action)
				newState[key] = childNewState
			})
			return newState
		}			
	}
	//简写上一个方法
	function combineReducers2(reducers) {
		let keys = Object.keys(reducers)
		return function (state = {}, action) {
			keys.reduce((newState, key) => {
				newState[key] = reducers[key](state[key], action)
				return newState
			}, {})
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值