首页 > 其他分享 >2024.10.14

2024.10.14

时间:2024-10-14 23:22:30浏览次数:1  
标签:2024.10 14 userId 存储 state localStorage Vuex store

刷新页面后,Vuex 中的数据被重置的原因是 Vuex 状态存储在内存中,当页面刷新时,整个 JavaScript 运行环境会重新加载,Vuex 中的数据也会丢失。因此,this.$store.state.user.userId 在页面刷新后可能会变成 nullundefined

要解决这个问题,你可以将用户数据(如 userId)持久化到浏览器的本地存储中(例如 localStoragesessionStorage),然后在页面刷新时从本地存储中重新加载 Vuex 状态。

解决方案:持久化 Vuex 数据

1. 将用户数据存储到 localStorage

在用户登录或数据初始化时,将 userId 存储到 localStorage 中:

// 当用户登录或初始化时,将 userId 存储到 localStorage
localStorage.setItem('userId', this.$store.state.user.userId);

2. 在 Vuex 中初始化时恢复数据

在 Vuex 的 store 初始化时,从 localStorage 中恢复 userId,这样在页面刷新后可以从本地存储中获取到用户数据。

const store = new Vuex.Store({
  state: {
    user: {
      userId: localStorage.getItem('userId') || null,  // 初始化时从 localStorage 获取 userId
    }
  },
  mutations: {
    setUserId(state, userId) {
      state.user.userId = userId;
      localStorage.setItem('userId', userId);  // 同时将 userId 存储到 localStorage
    }
  },
  actions: {
    login({ commit }, userId) {
      commit('setUserId', userId);  // 设置 userId
    }
  }
});

3. 使用 vuex-persistedstate 插件(可选)

你还可以使用 vuex-persistedstate 插件,它能够自动将 Vuex 中的数据持久化到本地存储中,简化操作。首先,安装插件:

npm install vuex-persistedstate

然后在 store.js 中配置:

import createPersistedState from 'vuex-persistedstate';

const store = new Vuex.Store({
  state: {
    user: {
      userId: null,
    }
  },
  mutations: {
    setUserId(state, userId) {
      state.user.userId = userId;
    }
  },
  plugins: [createPersistedState({
    storage: window.localStorage,  // 使用 localStorage 持久化
  })]
});

这样,每次刷新页面时,Vuex 的状态将自动从 localStorage 恢复。

总结

通过将用户数据存储到 localStorage 或使用 vuex-persistedstate 插件,你可以在页面刷新后保持 Vuex 状态,避免数据丢失。

标签:2024.10,14,userId,存储,state,localStorage,Vuex,store
From: https://www.cnblogs.com/258-333/p/18466427

相关文章

  • 2024/10/14
    今天我写了一个生成随机四则运算题的程序。importjavax.swing.;importjava.awt.;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.Random;class......
  • 2024年10月14日总结
    今日新学了20个单词,复习32个。上午上了一节数据结构课学了些栈和队列,下午上了java课。出于竞赛知识需要,晚上学了些二叉树三种遍历方式的相关知识。以下是我用cpp完成的前序,中序,后序遍历二叉树的代码实现。includestructTreeNode{intval;TreeNode*left;TreeNode*right;......
  • 10/14回文游戏
    includeusingnamespacestd;defineOK1;//定义宏观变量defineERROR0;defineOVERFLOW-2defineMASIZE100//定义栈的最大容量typedefstruct{char*base;char*top;intstacksize;}SqStack;intInitStack(SqStack&S)//初始化栈{S.base=newchar[MASIZE];......
  • 10.14日
    基本的匿名函数可以直接定义一个匿名函数,然后立即调用它。javascript(function(){console.log("这是一个匿名函数!");})();2.作为回调函数匿名函数非常常见于回调场景,比如数组的方法。javascriptconstnumbers=[1,2,3,4,5];constdoubled=numbers.map(functi......
  • 2024.10 记录(1)
    \(2024\)年\(10\)月记录qwq。20240929联考T3考虑怎么快速判定一个图是否有四元环,可以度数小定向连到度数大的点,由三元环计数的分析方法,枚举\(i\)相邻的\(u\),定向连出的\(v\),判定\(i,v\)是否有向相邻,是\(O(m\sqrtm)\)的。考虑\(u\)的度数为\(d_u\),现在来分析一......
  • 2024/10/14 模拟赛总结
    \(0+100+40+0=140\),怎么都会T3啊#A.char令\(dp_{i,j}\)为已经考虑了文本串前\(i\)位且将所有*填入了字符,匹配了模式串的前\(j\)位的方案总数转移显然,若第\(i\)位不是*,则只有这一位和模式串相等才会有答案,即\(dp_{i,j}=\begin{cases}dp_{i-1,j-1}&s_i=t_k\\0&......
  • 2024/10/14日 动手动脑
    1.关于继承中成员变量的访问特点代码示例:点击查看代码publicclassMain{publicstaticvoidmain(String[]args){Ziz=newZi();z.ziShow();}}classFu{Stringname="Fu";}classZiextendsFu{Stringname="Zi";p......
  • 10月14日课程动手动脑
    1.此处出错是因为newfoo()中没有参数,编译器无法识别该方法。2其最终的值为200,首先我们应该明白其中的顺序,在对象实例化的时候1静态字段和静态初始化块(如果有的话,这个例子中没有静态字段或静态初始化块)。2实例字段和实例初始化块:在对象被创建时,实例字段和实例初始化块会按照......
  • Stanford CS149 -- Assignment 3: A Simple CUDA Renderer
    作业描述及代码参见:CS149-asst3实验环境:WSL2;GeForceMX350;Cuda12.6第一部分:CUDA热身练习1:SAXPY实验结果:相比基于CPU的实现,性能明显下降。这是由于SAXPY属于I/O密集型任务,计算量较小,主要的时间耗费在数据的转移。第二部分:CUDA热身练习2:并行前缀和第三部分:简单......
  • Stanford CS149 -- Assignment 4: NanoGPT149
    作业描述及代码参见:cs149gptWarm-Up:访问张量张量/数组都是按行存储的,四维数组可以看作元素为三维数组的数组,元素大小即为三维数组内元素总数,以此类推。第1部分:简单(但不太高效)的注意力机制实现主要实现两个矩阵乘法和一个softmax运算。第2部分:块矩阵乘法和UnfusedSof......