Vue-localStorage和sessionStorage设置规范

·  阅读 159
Vue-localStorage和sessionStorage设置规范

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

在我们开发项目时,多个页面之间经常需要将数据存缓存,在需要的时候获取。这样就会出现多个页面都有存取缓存的地方,不仅代码比较冗余也不便于管理。为了提高代码的可维护性,可以在vue项目统一设置缓存方式,封装localStorage定时缓存cache.js,同时借助Vuex状态管理来统一存储缓存数据。使得代码更简洁优雅,一目了然。

graph TD
Vue项目 --> Vuex--> cache.js--> 获取缓存
cache.js--> 设置缓存

1、vue组件获取和设置缓存

// 在计算里通过助手函数获取
computed: {
    ...mapState({
        userToken: state => state.user.userToken,
    }),
},

// 在方法里通过助手函数调取方法
methods: {
    ...mapMutations([
        'setUserToken',
    ]),
}
复制代码

2、Vuex设置缓存方式

import {
    MyLocalStorage,
} from '../../utils/cache.js'

export default {
    state: {
        userToken: MyLocalStorage.Cache.get('USER_TOKEN') || '',   // 获取用户token
        userInfo: MyLocalStorage.Cache.get('USER_INFO') || '', // 获取用户信息
    },

    mutations: {
        // 提交用户token
        setUserToken(state, token) {
            state.userToken = token;
            MyLocalStorage.Cache.put('USER_TOKEN', token, 1 * 24 * 60 * 60);  // 设置用户token
        },

        // 提交用户信息
        setUserInfo(state, userInfo) {
            state.userInfo = userInfo;
            MyLocalStorage.Cache.put('USER_INFO', userInfo, 1 * 24 * 60 * 60);  // 设置用户信息
        },
    },

    actions: {
        // 用户登录
    }
}
复制代码

3、cache.js代码封装

// localStorage  扩展定时缓存
export const MyLocalStorage = {
    Cache: {
        // 加入缓存
        put: function (key, stringVal, time) {
            try {
                if (!localStorage) {
                    return false;
                }
                if (!time || isNaN(time)) {
                    time = 60;
                }
                var cacheExpireDate = (new Date() - 1) + time * 1000;
                var cacheVal = { 
                    val: stringVal, 
                    exp: cacheExpireDate 
                }
                localStorage.setItem(key, JSON.stringify(cacheVal)); // 存入缓存值
            } catch (e) {
                return null;
            }
        },

        // 获取缓存
        get: function (key) {
            try {
                if (!localStorage) { 
                    return false; 
                }
                var cacheVal = localStorage.getItem(key);
                var result = JSON.parse(cacheVal);
                var now = new Date() - 1;
                if (!result) { 
                    return null; // 缓存不存在 
                }
                if (now > result.exp) { 
                    // 缓存过期
                    this.remove(key);
                    return '';
                }
                return result.val;
            } catch (e) {
                this.remove(key);
                return null;
            }
        },
        // 移除缓存,一般情况不手动调用,缓存过期自动调用
        remove: function (key) {
            if (!localStorage) { 
                return false;
            }
            localStorage.removeItem(key);
        },
        // 清空所有缓存
        clear: function () {
            if (!localStorage) { 
                return false;
            }
            localStorage.clear();
        }
    }
}
复制代码

这就是统一管理缓存啦。统一都使用localStorage定时方式设置缓存,全局维护,不会出现每个页面都在单独的存取缓存。记录一下。温故而知新!

分类:
前端
标签:
分类:
前端
标签: