zoukankan      html  css  js  c++  java
  • 手写createStore

    export default function createStore(reducer, DefaultState) {
    
        let currentState = DefaultState,
            currentReducer = reducer
        let listeners = [];
    
        function isPlainObject() {
            if (typeof reducer === "object") {
                return false;
            }
            return Object.getPrototypeOf(reducer) === Object.prototype
        }
    
        function dispatch(action) {
            if (!isPlainObject) {
                throw new Error("must be a plain object")
            }
            if (action.type === undefined) {
                throw new Error("must has a property of type")
            }
            currentState = currentReducer(currentState, action);
            for (const listener of listeners) {
                listener();
            }
        }
    
        function getState() {
            return currentState;
        }
        /**
         * @author qian
         * @name 监听器
         * @param {监听函数} listener 
         */
        function subscribe(listener) {
            listeners.push(listener);
            let isRemove = true;
            return () => {
                if (isRemove) {
                    const index = listeners.indexOf(listener);
                    listeners.splice(index, 1);
                    isRemove = false;
                }
            }
        }
    
        function replaceReducer(newReducer) {
            currentReducer = newReducer;
        }
    
        //初建库时需要分发一次action
        dispatch({
            type: "@@redux/INIT" + Math.random().toString().substr(2, 7).split("").join(".")
        })
    
        return{
            dispatch,
            getState,
            subscribe,
            replaceReducer
        }
    } 
  • 相关阅读:
    微信小程序-rpx
    vue项目页面切换到默认显示顶部
    访问formData的数据
    vue图片懒加载
    react+umi+dva
    switch判断中,case后面跟逻辑表达式出错
    给2020做一个小结
    react+next.js遇到的问题及解决
    域名相关(结构与规范)
    react+antd一边踩坑一边积累
  • 原文地址:https://www.cnblogs.com/qydknowledge/p/14235992.html
Copyright © 2011-2022 走看看