详解在Vue中如何模块化使用Vuex

 更新时间:2024年01月24日 11:56:41   作者:JacksonChen_  
这篇文章给大家介绍了在Vue 中如何模块化使用 Vuex,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

正常使用

// src/store/index.js
 
import Vue from 'vue';
import Vuex from 'vuex';
 
Vue.use(Vuex);
 
export default new Vuex.Store({
  state: {
    count: 0, // 一个简单的状态示例
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    decrement(state) {
      state.count--;
    },
  },
  actions: {
    increment(context) {
      context.commit('increment');
    },
    decrement(context) {
      context.commit('decrement');
    },
  },
  getters: {
    getCount: state => state.count,
  },
});

在组件中使用 Vuex: 在需要访问或修改状态的组件中,你可以使用Vuex提供的辅助函数。

// src/components/Counter.vue
 
<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="decrement">Decrement</button>
  </div>
</template>
 
<script>
import { mapState, mapActions } from 'vuex';
 
export default {
  computed: {
    ...mapState(['count']),
  },
  methods: {
    ...mapActions(['increment', 'decrement']),
  },
};
</script>

模块化使用 

优点

在个人小项目当中,不使用模块化没什么问题,但是在公司或者大型项目下就需要使用模块化管理,使用模块化有利于可维护性、团队协作、代码结构清晰、提高可读性等优点。

假设你有两个模块,一个用于管理用户信息,另一个用于管理商品信息。

首先,分别创建两个 Vuex 模块文件:

模块文件

userModule.js

// userModule.js
const state = {
  user: null,
  userName:"张三"
};
 
const mutations = {
  SET_USER(state, user) {
    state.user = user;
  },
};
 
const actions = {
  setUser({ commit }, user) {
    commit("SET_USER", user);
  },
};
 
export default {
  namespaced: true,
  state,
  mutations,
  actions,
};

productModule.js

// productModule.js
const state = {
  products: [],
  productName:'电脑'
};
 
const mutations = {
  ADD_PRODUCT(state, product) {
    state.products.push(product);
  },
};
 
const actions = {
  addProduct({ commit }, product) {
    commit("ADD_PRODUCT", product);
  },
};
 
export default {
  namespaced: true,
  state,
  mutations,
  actions,
};

集中模块的状态到 Getters,方便页面中使用

在根级 Vuex Store 中创建 Getters,用于集中所有模块的状态数据:

getters.js

// getters.js
export default {
  userName: state => state.user.userName,
  productName: state => state.product.productName,
};

创建根级的 Vuex Store 文件,将上述的模块引入并注册:

store.js

import Vue from 'vue';
import Vuex from 'vuex';
import userModule from './userModule';
import productModule from './productModule';
import getters from './getters'; // 导入 getters 为对象
 
Vue.use(Vuex);
 
const store = new Vuex.Store({
  modules: {
    user: userModule,
    product: productModule,
  },
  getters,
});
 
export default store;

页面使用

<template>
  <div>
    <h1>User Name: {{ userName }}</h1>
  </div>
</template>
 
<script>
export default {
  computed: {
    userName() {
      return this.$store.getters.userName;
    }
  },
  mounted() {
    this.$store.dispatch("user/setUser", { userName: "John Doe" });
    this.$store.dispatch("product/addProduct", { name: "Product A" });
  },
};
</script>

到此这篇关于详解在Vue中如何模块化使用Vuex的文章就介绍到这了,更多相关Vue模块化使用Vuex内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue Router(v3.x) 路由传参的三种方式场景分析

    vue Router(v3.x) 路由传参的三种方式场景分析

    vue 路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转,传参方式可划分为 params 传参和 query 传参,而 params 传参又可分为在 url 中显示参数和不显示参数两种方式,这就是vue路由传参的三种方式,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • vue调用本地摄像头实现拍照功能

    vue调用本地摄像头实现拍照功能

    这篇文章主要介绍了vue调用本地摄像头实现拍照功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Vue实现微信小程序中预览文件的缩放功能

    Vue实现微信小程序中预览文件的缩放功能

    在微信小程序中,默认情况下,文件预览功能不支持文档缩放,导致用户在遇到小字体时难以清晰阅读,为了解决这一问题并提升用户体验,实现文档的缩放功能至关重要,所以本文
    2024-12-12
  • Vue取消Axios发出的请求

    Vue取消Axios发出的请求

    axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。首先需要知道:axios不是一种新的技术。axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范
    2022-09-09
  • Vue路由参数的传递与获取方式详细介绍

    Vue路由参数的传递与获取方式详细介绍

    顾名思义,vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效。传参方式可以划分为params传参和query传参,params传参又可以分为url中显示参数和不显示参数两种方式。具体区分和使用后续分析
    2022-09-09
  • 详解vue通过NGINX部署在子目录或者二级目录实践

    详解vue通过NGINX部署在子目录或者二级目录实践

    这篇文章主要介绍了详解vue通过NGINX部署在子目录或者二级目录实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 解决vue-pdf查看pdf文件及打印乱码的问题

    解决vue-pdf查看pdf文件及打印乱码的问题

    这篇文章主要介绍了解决vue-pdf查看pdf文件及打印乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue3获取DOM节点的3种方式实例

    Vue3获取DOM节点的3种方式实例

    Vue本来无需操作DOM来更新界面,而且Vue也不推荐我们直接操作DOM,但是我们非要拿到DOM操作DOM怎么办,下面这篇文章主要给大家介绍了关于Vue3获取DOM节点的3种方式,需要的朋友可以参考下
    2023-02-02
  • 浅谈vite和webpack的性能优化和区别

    浅谈vite和webpack的性能优化和区别

    本文主要介绍了浅谈vite和webpack的区别,从性能优化的几个方便讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 解决@vue/cli安装成功后,运行vue -V报:不是内部或外部命令的问题

    解决@vue/cli安装成功后,运行vue -V报:不是内部或外部命令的问题

    这篇文章主要介绍了解决@vue/cli安装成功后,运行vue -V报:不是内部或外部命令的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论