当前位置: 首页 > news >正文

vuex 简单使用

vuex 简单使用


示例:管理一个对象状态

假设我们要管理一个用户对象 user,包含 nameage 两个属性。


1. 定义 Vuex Store

store/index.js 中定义状态、mutations、actions 和 getters:

import { createStore } from 'vuex';

const store = createStore({
  state: {
    user: {
      name: 'John Doe',
      age: 30
    }
  },
  mutations: {
    // 更新用户名称
    updateUserName(state, newName) {
      state.user.name = newName;
    },
    // 更新用户年龄
    updateUserAge(state, newAge) {
      state.user.age = newAge;
    },
    // 更新整个用户对象
    updateUser(state, newUser) {
      state.user = newUser;
    }
  },
  actions: {
    // 异步更新用户名称
    updateUserNameAsync({ commit }, newName) {
      setTimeout(() => {
        commit('updateUserName', newName);
      }, 1000);
    }
  },
  getters: {
    // 获取用户全名
    fullName(state) {
      return state.user.name;
    },
    // 获取用户年龄
    userAge(state) {
      return state.user.age;
    }
  }
});

export default store;

2. 在组件中使用组合式 API 管理对象

在组件中,使用 useStore 钩子访问 Vuex store,并通过 computedmethods 来操作对象状态。

<template>
  <div>
    <h1>用户信息</h1>
    <p>姓名: {{ fullName }}</p>
    <p>年龄: {{ userAge }}</p>

    <input v-model="newName" placeholder="输入新姓名" />
    <button @click="updateName">更新姓名</button>

    <input v-model="newAge" placeholder="输入新年龄" type="number" />
    <button @click="updateAge">更新年龄</button>

    <button @click="updateNameAsync">异步更新姓名</button>
  </div>
</template>

<script>
import { computed, ref } from 'vue';
import { useStore } from 'vuex';

export default {
  setup() {
    const store = useStore();

    // 使用 computed 获取状态
    const fullName = computed(() => store.getters.fullName);
    const userAge = computed(() => store.getters.userAge);

    // 使用 ref 定义输入框的绑定值
    const newName = ref('');
    const newAge = ref('');

    // 更新用户名称
    const updateName = () => {
      store.commit('updateUserName', newName.value);
      newName.value = ''; // 清空输入框
    };

    // 更新用户年龄
    const updateAge = () => {
      store.commit('updateUserAge', parseInt(newAge.value, 10));
      newAge.value = ''; // 清空输入框
    };

    // 异步更新用户名称
    const updateNameAsync = () => {
      store.dispatch('updateUserNameAsync', newName.value);
      newName.value = ''; // 清空输入框
    };

    return {
      fullName,
      userAge,
      newName,
      newAge,
      updateName,
      updateAge,
      updateNameAsync
    };
  }
};
</script>

3. 代码说明

  1. State:

    • state.user 是一个对象,包含 nameage 属性。
  2. Mutations:

    • updateUserName:更新用户名称。
    • updateUserAge:更新用户年龄。
    • updateUser:更新整个用户对象(如果需要一次性更新多个属性)。
  3. Actions:

    • updateUserNameAsync:模拟异步操作,1 秒后更新用户名称。
  4. Getters:

    • fullName:返回用户的全名。
    • userAge:返回用户的年龄。
  5. 组件逻辑:

    • 使用 computed 获取 Vuex 中的状态。
    • 使用 ref 绑定输入框的值。
    • 通过 commit 提交 mutations 或 dispatch 分发 actions 来更新状态。

4. 运行效果

  • 输入新姓名并点击“更新姓名”按钮,会立即更新 Vuex 中的 user.name
  • 输入新年龄并点击“更新年龄”按钮,会立即更新 Vuex 中的 user.age
  • 点击“异步更新姓名”按钮,1 秒后会更新 Vuex 中的 user.name

总结

通过这种方式,你可以轻松管理 Vuex 中的对象状态。组合式 API 提供了更灵活的方式来访问和操作 Vuex store,同时保持代码的可读性和可维护性。如果你有更复杂的需求(如嵌套对象或数组),也可以使用类似的方式管理。

相关文章:

  • 【进程与线程】Linux文件 I/O 编程中的生产者与消费者案例
  • 图解循环神经网络(RNN)
  • 基于Ubuntu系统的docker环境对MySQL8.0.36主从部署
  • 智能停车收费-------如何用stm32G431结合LCD的uC8230型液晶控制器的驱动程序显示动态二维码
  • eNSP防火墙综合实验
  • PH热榜 | 2025-02-18
  • Linux下为Intel核显安装OpenCL
  • C++基础知识学习记录—string类
  • 什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用
  • Linux3-文件io、时间有关函数
  • 使用API有效率地管理Dynadot域名,参与过期域名竞价
  • 高子昂医编---23岁,医疗编上岸,正式开启养老生活
  • 【Go | 从0实现简单分布式缓存】-2:HTTP服务端与一致性哈希
  • 【Spring+MyBatis】_图书管理系统(中篇)
  • 禁止WPS强制打开PDF文件
  • linux环境-nginx通过nginx_upstream_check_module模块,配置服务自动检测-日志自动分割
  • 【Spring详解二】容器的基本实现
  • 制造运营管理(MOM)与仓库管理系统(WMS)何以相辅相成对企业的生产管理进行提升
  • ​实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”​等荣誉
  • uniapp 连接mqtt
  • 听炮检书:柳诒徵1927年的选择
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业
  • 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动
  • 长线游、县域游、主题游等持续升温,假期文旅市场供需两旺
  • 视频公开课上线之后,北大成为多少人未曾谋面的母校?
  • 艺术开卷|韩羽读齐白石:妙在似与不似之间