Online Judge——【前端项目初始化】全局状态管理

状态管理:所有页面全局共享的变量,而不是局限在某一个页面中。

适合作为全局状态的数据:比如已登录用户信息。

目录

一、创建user.ts文件

我们要实现状态管理的话,要先创建一个目录store(之前项目初始化时已经帮我们创建了),vuex就像一个中央处理库,用于在vue.js应用程序中管理共享状态(数据),如下:

  • 之后在store文件夹中建立user.js,用于专门存放用户的状态信息,简单理解就是用于保存用户的信息。
    state:存储的状态信息,比如用户信息。
    getters:便捷获取对象的一个方法
    mutation(尽量同步):定义了变量进行增删改(更新)的方法
    actions:执行异步操作,并且触发mutation的更改(可以理解为actions调用mutation)。

二、定义user模块

user.ts文件如下:

c 复制代码
// initial state
import { StoreOptions } from "vuex";

export default {
  namespaced: true,
  state: () => ({
    loginUser: {
      userName: "未登录",
    },
  }),
  actions: {
    getLoginUser({ commit, state }, payload) {
      commit("updateUser", { userName: "ly" });
    },
  },
  mutations: {
    updateUser(state, payload) {
      state.loginUser = payload;
    },
  },
} as StoreOptions<any>;

index.ts文件如下:

c 复制代码
import { createStore } from "vuex";
import user from "./user";

export default createStore({
  mutations: {},
  actions: {},
  modules: {
    user,
  },
});

三、获取静态变量

cpp 复制代码
const store = useStore();
store.state.user?.loginUser

效果演示:

四、修改状态变量

代码如下:

cpp 复制代码
store.dispatch("user/getLoginUser", {
  userName: "ly",
});

代码解释:上述代码通过Vuex store的分发(dispatch)方法调用一个名为user/getLoginUser的action,并且传递了一个包含userName为ly的对象作为参数。

  • store.dispatch是vuex store提供的一个方法用于分发一个action。action在vuex中执行异步操作(比如说API请求),然后将数据提交给mutations进行状态更新
  • uer/getLoginUser是action的名称;"user"是vuex模块的命名空间(namespace),getLoginUser是该模块下的一个action名称,使用命名空间可以避免action名称冲突。
  • { userName: "ly" }是传递给action的参数对象。
相关推荐
用户0333074139510 小时前
TypeScript using 与 AsyncDisposableStack:在真实服务端代码中协调多资源清理
前端
daisychey10 小时前
用 Playwright 做多平台内容分发,我踩过的 8 个坑
前端
IT_陈寒11 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
大龄秃头程序员11 小时前
iOS冷启动监控Demo
前端
光影少年11 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
掘金酱12 小时前
[稀土掘金 × 火山引擎] AI用量周榜冲刺赛|获奖名单公示
前端·人工智能·后端
泡泡oO12 小时前
“如果你还在用Superpowers,那我不要和你说话”
前端·后端·全栈
维克兜率天12 小时前
趋势过滤:避免被“假突破“反复打脸
前端
8年区块链老兵13 小时前
一篇文章教会你:用区块高度读懂比特币链上的每一笔交易
前端
xixichensh13 小时前
前端转做AI程序员第一步——开发一个AI流式对话Demo
前端