redux核心逻辑及redux中常用API的方法实现

本文深入解析Redux的核心逻辑,包括createStore、applyMiddleware、combineReducers与bindActionCreators的实现。探讨如何增强dispatch方法,以及这些方法在Redux应用中的作用。中间件机制允许自定义dispatch行为,而combineReducers则方便地组合多个reducer。bindActionCreators则用于将action与dispatch连接,简化组件中的action调用。
摘要由CSDN通过智能技术生成

redux核心通过获取调用creactStore获取store核心getState()方法、dispath()方法、subscribe()方法

首先定义creactStore方法,方法有三个参数reducer(ruducer函数),preloadedState(状态),enhancer(加强dispath方法)

function createStore (reducer, preloadedState, enhancer) {
   
// reducer 类型判断 
  if (typeof reducer !== 'function') throw new Error('redcuer必须是函数');
}

定义初始状态,getState方法返回状态

// 状态
  var currentState = preloadedState;
  // 获取状态
  function getState () {
   
    return currentState;
  }

subscribe方法参数是一个函数,数据改变时调用函数参数,所以subscribe的参数调用需要用到发布订阅模式,同时subscribe可能会多次调用,这里用数组存储传递进来的函数参数,当调用dispath时触发

// 订阅者
  var currentListeners = [];
  // 订阅状态的改变
  function subscribe (listener) {
   
    currentListeners.push(listener);
  }

dispath方法触发action,action必须是一个对象且必须有type属性

function dispatch (action) {
   
    // 判断action是否是一个对象
    if (!isPlainObject(action)) throw new Error('action必须是一个对象');
    // 判断action中的type属性是否存在
    if (typeof action.type === 'undefined') throw new Error('action对象中必须有type属性');
    // 调用reducer函数 处理状态
    currentState = reducer(currentState, action);
    // 调用订阅者 通知订阅者状态发生了改变
    for (var i = 0; i < currentListeners
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值