• 状态管理器


    在Redux中,Redux让应用的数据被集中管理,整个应用的state储存在唯一的store对象中,并且只能通过触发action的方式来修改state。

    在Vuex中, Vuex是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态。

    1.state对象包含了应用的全部的状态
    2.通过getters来获得state中的状态,或者是通过这些状态派生出来的一些状态
    3.如果想修改state中的状态值,只能通过提交mutation的方式
    4.action用来提交mutation,可以包含异步操作。 action只会被 store.dispatch方法触发

    创建一个简单的状态管理器来模拟Redux或Vuex的状态转换。

    // 自执行创建模块
    (function() {
        /* states 结构预览
        states = {
            a: 1,
            b: 2,
            m: 30,  
            o: {}
        }*/
    
        var states = {};  // 私有变量,用来存储状态与数据
    
        // 判断数据类型
        function type(elem) {
            if(elem == null) {
                return elem + '';
            }
            return toString.call(elem).replace(/[[]]/g, '').split(' ')[1].toLowerCase();
        }
    
    
        /**
         * @Param name 属性名
         * @Description 通过属性名获取保存在states中的值
        */
        function get(name) {
            return states[name] ? states[name] : '';
        }
    
        function getStates() {
            return states;
        }
    
        /*
        * @param options {object} 键值对
        * @param target {object} 属性值为对象的属性,只在函数实现时递归中传入
        * @desc 通过传入键值对的方式修改state树,使用方式与小程序的data或者react中的setStates类似
        */
        function set(options, target) {
            var keys = Object.keys(options);
            var o = target ? target : states;
    
            keys.map(function(item) {
                if(typeof o[item] == 'undefined') {
                    o[item] = options[item];
                }
                else {
                    type(o[item]) == 'object' ? set(options[item], o[item]) : o[item] = options[item];
                }
                return item;
            })
        }
    
        // 对外提供接口
        window.get = get;
        window.set = set;
        window.getStates = getStates;
    })()
    
    // 具体使用如下
    
    set({ a: 20 });     // 保存 属性a
    set({ b: 100 });    // 保存属性b
    set({ c: 10 });     // 保存属性c
    
    // 保存属性o, 它的值为一个对象
    set({ 
        o: {
            m: 10,
            n: 20
        }
    })
    
    // 修改对象o 的m值
    set({
        o: {
            m: 1000
        }
    })
    
    // 给对象o中增加一个c属性
    set({
        o: {
            c: 100
        }
    })
    console.log(getStates())



  • 相关阅读:
    codevs 2021 中庸之道
    bzoj 1227: [SDOI2009]虔诚的墓主人
    cogs 2620. [HEOI2012]朋友圈
    bzoj 3123: [Sdoi2013]森林(45分暴力)
    cogs 1685 魔法森林
    bzoj 1061: [Noi2008]志愿者招募
    poj 1743 Musical Theme
    bzoj 1001: [BeiJing2006]狼抓兔子
    bzoj 4006: [JLOI2015]管道连接
    hdu 5693 D Game
  • 原文地址:https://www.cnblogs.com/lishuxue/p/6594997.html
Copyright © 2020-2023  润新知