Redux实现

简介

       官方意思:Redux 是 JavaScript 状态容器,提供可预测化的状态管理,
       现在很多时候都是将Redux和React放在一起,因为React提出将展示组件与容器组件分离的思想,所以降低了React 与Redux之间的耦合度。
       对于Redux架构的使用并不是非用不可,对于简单的代码使用Redux会增加代码的复杂性,对于多交互、多数据源场景使用Redux会使数据之间的交互更加清晰,有逻辑性。
       如果你的应用有以下场景,建议使用 Redux

  • 某个组件的状态,需要共享
  • 某个状态需要在任何地方都可以拿到
  • 一个组件需要改变全局状态
  • 一个组件需要改变另一个组件的状态

基本原则

       整个应用只有唯一一个可信数据源,也就是只有一个 Store
       State 只能通过触发 Action 来更改
       State 的更改必须写成纯函数,也就是每次更改总是返回一个新的 State,在 Redux 里这种函数称为 Reducer
       Redux模块
       1). redux模块整体是一个对象模块
       2). 内部包含几个函数
       createStore()
       combineReducers()
       applyMiddleware()
       3). store对象的功能
       getState()
       dispatch(action)
       subscibe(listener)
/*

	创建store对象的函数
	 */
	export function createStore(reducer) {
	  // 内部管理的state
	  let state
	  // 用来缓存监听的数组容器
	  const listeners = []
	  // 初始调用reducer得到初始state值
	  state = reducer(state, {type: '@@mini-redux/INIT'})
	
	  /*
	  获取当前状态
	   */
	  function getState() {
	    return state
	  }
	
	  /*
	  分发消息
	   */
	  function dispatch(action) {
	    // 调用reducer, 得到新的state
	    state = reducer(state, action)
	    // 调用监听缓存中的所有Listener, 通知状态变化
	    listeners.forEach(listener => listener())
	  }
	
	  /*
	  订阅监听
	   */
	  function subscribe(listener) {
	    // 将新的监听添加到监听缓存容器中
	    listeners.push(listener)
	  }
	
	  // 向外暴露store对象
	  return {getState, dispatch, subscribe}
	}
	/*
	合并多个reducer的函数
	 */
	export const combineReducers = (reducers) => {
	  // 返回一个reduer声明函数
	  return (state = {}, action) => {
	    // 返回包含所有reducer状态的总state对象
	    return Object.keys(reducers).reduce((preState, key) => {
	      // 调用对应的reducer函数得到对应的新state, 并保存到总state中
	      preState[key] = reducers[key](state[key], action)
	      return preState
	    }, {})
	  }
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值