redux 简单实现

redux 简单实现


最近学习了一下redux趁热撸一个简单版帮助记忆

//创建createStore
export function createStore(reducer,enhancer){
	if(enhancer){
		return enhancer(createStore)(reducer);
	}
	let currentState = undefined; 
	let currentListeners = [];
	function getState(){
		return currentState
	}
	function dispatch(action){
		currentState = reducer(currentState,action)
		currentListeners.map(cb=>cb())
	}
	function subscribe(listener){
		currentListeners.push(listener)
	}
	dispatch({ type: "@LJDOM-REDUX" });//初始化state
	return {
		getState,
		dispatch,
		subscribe,
	}
}
//创建applyMiddleware
export function applyMiddleware(...middle){
	return createStore => (...reduce) =>{
		let store = createStore(...reduce);
		let middlewareAPI={
			getState: store.getState,
			dispatch: store.dispatch
		}
		//执行中间件函数传入参数
		let chain = middle.map(mdw => mdw(middlewareAPI));
		//按顺序执行中间件返回包装过的dispatch
		let dispatch = compose(...chain)(store.dispatch);
		return{
			...store,
			dispatch
		}
	}
}
//按顺序嵌套中间件 [f1,f2,f3] => f3(f2(f1()))
function compose(...funcs) {
  const len = funcs.length;
  if (len === 0) {
    return arg => arg;
  }
  if (len === 1) {
    return funcs[0];
  }
  return funcs.reduce((left, right) => (...args) => right(left(...args)));
}
//reducer
function reducer(state=0,action){
    switch(action.type){
        case 'add':
            return state +1;
        default:
            return state;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值