本文主要介绍redux的react-redux的原理
redux原理
github地址:https://github.com/majunchang/miniRedux
原生react的调用和常用方法
react流程图展示
- redux中有一个reducer函数和action 通过dispatch(action)来触发reducer的对应的case
- 提供一个createStore方法 传入reducer 返回的对象中包含getState和subscribe和dispatch方法
调用示例:
redux 原生版的调用 getState()获取状态 subscribe()进行监听 dispatch()触发相应的action 改变state
1 | import { createStore } from './woniuRedux/woniuRedux' |
redux实现原理(源码解析)(简易版)
主要介绍createStore applyMiddleware和bindActionCreators
caeateStore 源码解读
1 | export function createStore (reducer, enhancer) { |
- createStore 内部是一个观察者模式, subscribe 添加注册函数 dispatch让函数自调用
- 首次调用createStore的时候 内部会执行一次dispatch 将reducer绑定进来
- enhancer 是一个组合 store creator 的高阶函数,返回一个新的强化过的 store creator。这与 middleware 相似,它也允许你通过复合函数改变 store 接口。
1 | enhancer ƒ (createStore) { |
普及一下高阶函数
高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件
1 | // 高阶组件 思想 |
applyMiddleware源码解读
1 | // 中间件机制 |
compose函数源码
1 | function compose (...fns) { |
结合中间件的源码来看 我们这里以thunk举例
- thunk中最开始接受的参数 {dispatch getState} 是从midApi中传来的
- next 指代store.dispatch action就是action
1 | const thunk = ({dispatch, getState}) => next => action => { |
bindActionCreators 源码解读
官网用法 : http://www.redux.org.cn/docs/api/bindActionCreators.html
1 | // 工具函数 这个函数的作用是为了让creator函数里面的参数进行透传 |