前端数据存储策略实践:使用VueX及localStorage

179 阅读1分钟

VueX是一个前端数据状态管理库,帮助我们管理Vue程序中的状态数据。

安装

npm i vuex

引入 & 初始化

在main.js中

import { createStore } from 'vuex'

const store = createStore({
    state() {

    }, 
    getters: {

    },
    mutations: {
        
    }
});
app.use(store).mount('#app')

简单的说明下:

state() 定义存储哪些数据

getters 返回数据

mutations 增加/更新数据

保存用户数据的例子

const store = createStore({
    state() {
        return {
            user: {}
        }
    },
    getters: {
        user(state) {
            return state.user;
        }
    },
    mutations: {
        userLogin(state, currentUser) {
            state.user = currentUser;
        }
    }
});

在Vue组件中如何使用呢?

增加、更新数据:

store.commit('userLogin',{... });

获取数据:

let user = store.getters.user;

代码

<script setup>
import {useStore} from "vuex";
import {ref} from "vue";

const store = useStore();

const id = ref(null);
const username = ref(null);
const email = ref(null);

function updateUser() {
  store.commit('userLogin',{
    id: id.value,
    username: username.value,
    email: email.value
  });
}

function getUser() {
  let user = store.getters.user;
  console.log(user);
}

</script>

<template>
  login
  <div id="new-user">
    <input type="text" placeholder="Add a id.." id="userid" v-model="id">
    <input type="text" placeholder="Add a username.." id="username"  v-model="username">
    <input type="text" placeholder="Add an email.." id="email"  v-model="email">
    <input type="submit" id="submit-user" @click="updateUser" value="Submit">
  </div>

  <div>
    <input type="submit" id="getuser" @click="getUser" value="获取用户">
  </div>

</template>

<style scoped>

</style>

测试一下,更新、获取数据都没有问题。但是,此时你刷新页面,再次获取,会发现数据未定义。

数据消失了。这是因为:VueX store并未将数据持久化,(可以将它理解为内存,计算机重启即消失),刷新页面,数据就消失了。持久化方法很多,可以保存到数据库,或者保存到本地如localStorage。

1,当App初始化的时候,尝试加载localStorage中的数据

在main.js中

const app = createApp({
    extends: App,
    beforeCreate() {
        store.commit('initStore')
    }
})

store mutations中:

initStore(state) {
    if(localStorage.getItem('store')) {
        this.replaceState(JSON.parse(localStorage.getItem('store')));
    }
},

2,使用订阅事件,当数据变更的时候,持久化到localStorage

store.subscribe((mutation, state) => {
    localStorage.setItem('store', JSON.stringify(state));
})

这就是使用VueX及localStorage进行前端数据状态管理的基本方法了。

通常来说,我们应该将更多的数据本地化保存,特别是那些不易变化的数据。这样,可以极大的提高应用性能,提升用户体验。