Redux 实现原理

本文详细探讨了Redux的状态管理库实现原理,从store的创建到action的dispatch,再到reducer的执行和state的更新,揭示了Redux如何维护应用的单一数据源,并通过中间件扩展其功能。
摘要由CSDN通过智能技术生成
以下白话一下个人理解
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)
    );
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值