Vue项目中使用vuex详解

Vue项目中使用vuex详解

什么是Vuex

Vuex是一个专为Vue.js应用程序开发的状态管理模式。 Vuex采用集中式存储管理应用的所有组件的状态,将组件的共享状态抽取出来,以一个全局单例模式管理。

安装

在vue-cli工具生成的项目中,使用以下命令安装vuex:

npm install vuex --save

状态管理

Vuex中最核心的概念就是“状态管理”,即应用程序的所有数据都保存在store中。

创建store

在main.js中创建store:

import Vue from 'vue'
import App from './App.vue'
import Vuex from 'vuex'

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    getCount: state => state.count
  },
  mutations: {
    incrementCount(state) {
      state.count++;
    }
  }
});

new Vue({
  store,
  render: h => h(App),
}).$mount('#app')

其中,state中保存了应用程序的所有数据,在这里只保存了一个计数器的初始值为0。mutations中定义了修改state中数据状态的方法,这里只定义了一个计数器加1的方法,即incrementCount。

使用store

在组件中使用store,可以用以下方式:

computed: {
  ...Vuex.mapGetters(['getCount'])
},
methods: {
  ...Vuex.mapMutations(['incrementCount'])
}

其中,...是ES6语法提供的对象扩展运算符,可以让我们在对象中使用另一个对象的属性和方法。

在组件的模板中可以这样使用:

<template>
  <div>
    {{ getCount }}
    <button @click="incrementCount()">+1</button>
  </div>
</template>

其中,getCount和incrementCount分别是Vuex中定义的getters和mutations。

辅助函数

除了使用对象扩展运算符,我们还可以使用Vuex提供的辅助函数来更方便地使用store。

mapGetters

mapGetters可以将store中的getters映射到组件的computed中。

import { mapGetters } from 'vuex'

computed: {
  ...mapGetters(['getCount'])
}

然后就可以在模板中使用getCount了。

mapMutations

mapMutations可以将store中的mutations映射到组件的methods中。

import { mapMutations } from 'vuex'

methods: {
  ...mapMutations(['incrementCount'])
}

然后就可以在模板中使用incrementCount了。

示例

一个使用辅助函数的示例:主要的代码在MyButton.vue中。

<template>
  <button @click="incrementCount">{{ getCount }}</button>
</template>

<script>
  import { mapGetters, mapMutations } from 'vuex'

  export default {
    computed: {
      ...mapGetters(['getCount'])
    },
    methods: {
      ...mapMutations(['incrementCount'])
    }
  }
</script>

在App.vue中引用:

<template>
  <div>
    <my-button></my-button>
    <my-button></my-button>
  </div>
</template>

<script>
  import MyButton from './MyButton.vue'

  export default {
    components: {
      MyButton
    }
  }
</script>

使用Vuex可以使得多个组件都可以访问到同一个state,从而实现数据的共享,这在有些场景下非常有用。
完整的代码可参考以下GitHub链接:
https://github.com/luolei07/Vuex-Demo

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目中使用vuex详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 通过vue手动封装on、emit、off的代码详解

    下面就是“通过Vue手动封装on、emit、off的代码详解”的攻略。 什么是on、emit、off on、emit、off是Vue中的三个方法。其中,on用于监听自定义事件的回调函数,emit用于触发子组件中自定义事件,off用于移除事件监听器。 封装on、emit、off 在Vue框架中,我们不需要手动封装on、emit、off,可以直接在组件中使用这三…

    Vue 2023年5月27日
    00
  • 微信小程序实现表单验证提交功能

    讲解“微信小程序实现表单验证提交功能”的完整攻略,具体步骤如下: 1. 编写表单 首先需要在小程序页面中编写表单,包括输入框、下拉框等等常见表单元素,并且给每一个表单元素设置一个唯一的id值,以便后面表单验证时获取元素。代码示例: <form> <input id="name" placeholder="请输入…

    Vue 2023年5月27日
    00
  • Vant主题定制如何修改颜色样式

    下面是关于Vant主题定制如何修改颜色样式的完整攻略,过程中包含两条示例说明。 确定主题颜色 首先,我们需要确定用于主题的颜色。可以到Vant的文档中查看可用的颜色变量。例如,有三个颜色变量 $van-primary-color、$van-success-color、$van-danger-color,它们分别对应了主色、成功、危险的颜色。 修改颜色 接下来…

    Vue 2023年5月27日
    00
  • Vue3父子通讯方式及Vue3插槽的使用方法详解

    让我来给大家详细讲解一下“Vue3父子通讯方式及Vue3插槽的使用方法详解”。 Vue3父子通讯方式 在Vue3中,父组件向子组件传递数据是通过props属性来实现的,子组件接收到数据后,可以通过触发事件将数据传递回父组件。 父组件向子组件传递数据 父组件使用props属性来向子组件传递数据,示例代码如下: <template> <div&…

    Vue 2023年5月28日
    00
  • Vue如何使用cdn加载资源加快打包速度

    Vue 是一个流行的 JavaScript 框架,它提供了许多特性以方便你构建单页应用程序。在使用 Vue 时,我们常常需要从 CDN 加载资源来加快打包速度。本文将介绍 Vue 如何使用 CDN 加载资源以及如何进行相应的配置。 CDN 资源 Vue 有三个主要的 CDN 资源,分别是: https://cdn.jsdelivr.net/npm/vue/d…

    Vue 2023年5月28日
    00
  • vue3 hook自动导入原理解析

    我来为你详细讲解一下“vue3 hook自动导入原理解析”的攻略。 什么是Vue3 Hook Vue3中,为了更好地组织代码,同时也为了解决vue2中使用mixin会出现命名冲突的问题,新增了Hook的概念。Hook实际上就是一些特定的函数,它们和组件生命周期函数类似,但是可以被任意组合使用,而且可以被多个组件复用。Vue3中内置了多个Hook,例如useS…

    Vue 2023年5月28日
    00
  • 八种vue实现组建通信的方式

    以下是八种Vue实现组件通信的完整攻略: 1. Props Props是Vue组件间通信中最常用的一种方式。Props允许父组件向子组件传递数据,可以通过在子组件中声明props选项来接收父组件传递的值。示例代码如下: <!–父组件模版–> <template> <Child :msg="message"…

    Vue 2023年5月29日
    00
  • Vue页面堆栈管理器详情

    Vue页面堆栈管理器详情 本文介绍了Vue页面堆栈管理器,并提供使用指南来帮助开发者更好地管理页面堆栈。 什么是Vue页面堆栈管理器? Vue页面堆栈管理器通过维护页面堆栈来管理Vue.js单页应用程序中的页面历史。它可以帮助开发者快速获得页面历史,以便更轻松地导航和管理应用程序状态。使用Vue页面堆栈管理器,开发者可以实现以下目标: 管理页面历史 构建多级…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部