以下白话一下个人理解
Action:与外部的接口之一,可以理解为告知外部我都可以做些什么,您有需要尽管吩咐。
Reducer:对应Action所需要做的事情,当然一般来说只是计算得出新的state
Store:与外部交互的对象,直接提供state,响应action,管理订阅者
function createStore(reducer, preloadedState) {//reducer被store调用,统一state的控制,并发布给所有的依赖
let state = preloadedState;
const listeners = [];//存放订阅者方法,dispatch时循环执行这些方法
function getState() {
return state;
}
function subscribe(listener) {
listeners.push(listener);
return function unsubscribe() {
const index = listeners.indexOf(listener);
listeners.splice(index, 1);
}
}
function dispatch(action) {
state = reducer(state, action);
listeners.forEach(listener => listener());
}
dispatch({type: '@@redux/INIT'});
return { dispatch, subscribe, getState };
}
function mapValues(obj, fn) {
return Object.keys(obj).reduce((result, key) => {
result[key] = fn(obj[key], key);
return result;
}, {});
}
function bindActionCreator(actionCreator, dispatch) {
return (...args) => dispatch(actionCreator(...args));
}
export function bindActionCreators(actionCreators, dispatch) {
return typeof actionCreators === 'function' ?
bindActionCreator(actionCreators, dispatch) :
mapValues(actionCreators, actionCreator =>
bindActionCreator(actionCreator, dispatch)
);
}
export function combineReducers(reducers) {
return (state = {}, action) => mapValues(reducers,
(reducer, key) => reducer(state[key], action)
);
}