vue3.2中的vuex使用详解

下面是关于vue3.2中的vuex使用详解的完整攻略。

1. 什么是Vuex

Vuex是Vue.js应用程序的状态管理模式。它通过一个集中的存储管理所有组件的状态,并以相应的规则保证状态以可预测的方式发生变化。

2. 如何使用Vuex

2.1 安装Vuex

在vue项目中使用Vuex,需要先安装Vuex。使用npm安装:

npm install vuex --save

2.2 Vue中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {...},
  mutations: {...},
  actions: {...},
  getters: {...}
})

export default store

其中,state表示存储的状态值,mutations表示提交对状态的更改,actions表示异步操作,getters表示从state中派生出一些状态。

2.3 在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

2.3.1 mapState使用示例

mapState函数可以直接将Vuex的state映射到组件的计算属性中。

import {mapState} from 'vuex'

export default {
  // ...
  computed: {
    ...mapState({
      count: state => state.count
    })
  }
}

2.3.2 mapMutations使用示例

mapMutations函数可以将Vuex的mutations映射到组件的methods中。

import {mapMutations} from 'vuex'

export default {
  // ...
  methods: {
    ...mapMutations([
      'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`
      'decrement' // 将 `this.decrement()` 映射为 `this.$store.commit('decrement')`
    ])
  }
}

2.3.3 mapActions使用示例

mapActions函数可以将Vuex的actions映射到组件的methods中。

import {mapActions} from 'vuex'

export default {
  // ...
  methods: {
    ...mapActions([
      'incrementAsync', // 将 `this.incrementAsync()` 映射为 `this.$store.dispatch('incrementAsync')`
      'decrementAsync' // 将 `this.decrementAsync()` 映射为 `this.$store.dispatch('decrementAsync')`
    ])
  }
}

2.3.4 mapGetters使用示例

mapGetters函数可以将Vuex的getters映射到组件的计算属性中。

import {mapGetters} from 'vuex'

export default {
  // ...
  computed: {
    ...mapGetters([
      'doneTodosCount'
    ])
  }
}

3. 示例说明

3.1 示例一

下面是一个简单的示例,说明如何在Vuex中管理计数器的状态。

安装Vuex

使用npm安装Vuex:

npm install vuex

在Vue项目中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  },
  actions: {
    incrementAsync({commit}) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    },
    decrementAsync({commit}) {
      setTimeout(() => {
        commit('decrement')
      }, 1000)
    }
  },
  getters: {
    doneTodosCount: state => {
      return state.count
    }
  }
})

export default store

在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

<template>
  <div>
    <span>{{count}}</span>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapState({
      count: state => state.count
    }),
    ...mapGetters([
      'doneTodosCount'
    ])
  },
  methods: {
    ...mapMutations([
      'increment',
      'decrement'
    ]),
    ...mapActions([
      'incrementAsync',
      'decrementAsync'
    ])
  }
}
</script>

3.2 示例二

下面是另一个示例,说明如何在Vuex中管理购物车的状态。

安装Vuex

使用npm安装Vuex:

npm install vuex

在Vue项目中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {
    cart: []
  },
  mutations: {
    addToCart(state, product) {
      const item = state.cart.find(i => i.id === product.id)
      if (item) {
        item.quantity++
      } else {
        state.cart.push({...product, quantity: 1})
      }
    }
  },
  actions: {},
  getters: {
    cartCount: state => {
      return state.cart.reduce((count, item) => count + item.quantity, 0)
    }
  }
})

export default store

在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

<template>
  <div>
    <h2>购物车</h2>
    <p>商品数量:{{cartCount}}</p>
    <ul>
      <li v-for="item in cart" :key="item.id">{{item.name}} * {{item.quantity}}</li>
    </ul>
    <button @click="addToCart({id: 1, name: '商品1', price: 100})">加入购物车</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapState({
      cart: state => state.cart
    }),
    ...mapGetters([
      'cartCount'
    ])
  },
  methods: {
    ...mapMutations([
      'addToCart'
    ]),
    ...mapActions([
    ])
  }
}
</script>

以上就是关于vue3.2中的vuex使用详解的完整攻略以及两个示例的详细说明。

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

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

相关文章

  • vue基于input实现密码的显示与隐藏功能

    Vue基于input实现密码的显示与隐藏功能的攻略如下: 开发环境搭建 首先我们需要保证有一个稳定的开发环境。这里我们可以借助脚手架工具Vue-cli,快速地搭建起一个本地环境。 密码框显示状态绑定 我们需要通过v-model指令来将input框的显示状态进行绑定。在data里面新增一个变量passwordVisible,并且默认设置为false,表示密码框…

    Vue 2023年5月27日
    00
  • Vue 2.0 侦听器 watch属性代码详解

    Vue 2.0 侦听器 watch属性代码详解 简介 Vue 2.0 中有个重要的特性——侦听器。在渲染过程中,Vue 会观察数据变化,并且自动更新 DOM。 在某些情况下,这不够灵活,我们需要执行一些自定义逻辑,这就是侦听器的用处了。 基础语法 Vue 中侦听器的基础语法是: watch: { // 监听的属性 property: { // 监听回调函数 …

    Vue 2023年5月28日
    00
  • mpvue开发音频类小程序踩坑和建议详解

    mpvue开发音频类小程序踩坑和建议详解 1. 前言 mpvue 是一个基于 Vue.js 核心的高性能小程序开发框架。它传承了 Vue.js 的语法风格和开发习惯,在小程序开发中尽可能的减少了学习成本和上手难度。同时,mpvue 利用 Webpack 和 Vue.js 的自身特性,将组件和业务逻辑代码进行分离抽离,维护更加方便易用。 在开发小程序中,音频类…

    Vue 2023年5月27日
    00
  • 详解Vue中一种简易路由传参办法

    当我们使用Vue进行开发时,经常需要进行路由跳转和传参。路由传参可以方便我们在不同页面之间传递数据,实现页面之间的交互和通讯。本文将介绍一种简易的Vue路由传参方法,仅需使用Vue的内置方法即可实现。 一、Vue内置方法$router.push() Vue内置了一个$router方法,可以用于进行路由跳转。在进行页面跳转的时候,我们可以利用这个方法进行路由参…

    Vue 2023年5月27日
    00
  • 安装vue3开发者工具但控制台没有显示出vue选项的解决

    首先需要理解的是,在安装 Vue3 开发者工具时,可能会遇到控制台中没有显示出 Vue 选项的情况。这通常是由于以下原因所导致的: Vue 3 已经推出不久,开发者工具可能还未完全支持该版本的 Vue。 安装时出现了错误或者某些配置不正确。 针对以上原因,我们可以采取以下措施: 1. 确保 Vue3 开发者工具已正确安装 在控制台中,输入如下命令进行检查: …

    Vue 2023年5月27日
    00
  • vue-vuex中使用commit提交mutation来修改state的方法详解

    当我们使用Vue.js + Vuex进行项目开发时,我们需要通过commit提交mutation来修改state。以下是使用commit提交mutation修改state的详细步骤: 1. 创建Vuex Store 我们首先要在项目中创建Vuex Store,Store是一个对象,包含着我们需要管理的状态(state)、变更状态的方法(actions、mut…

    Vue 2023年5月28日
    00
  • 详解Vue自定义指令及使用

    详解Vue自定义指令及使用 什么是Vue自定义指令? Vue自定义指令是一种可以用来扩展Vue.js的功能的语法,它可以让我们自定义一些指令,以实现一些特定的交互效果、操作等。Vue自带了一些常用指令比如v-if、v-show等,但在实际业务开发中,有时还需要自定义指令来满足特定的需求。 自定义指令一般由两个部分组成:指令注册和指令函数。 如何注册自定义指令…

    Vue 2023年5月28日
    00
  • vue中v-for指令完成列表渲染

    当我们在Vue.js中需要渲染一个列表时,可以使用v-for指令。它是一个循环指令,可以遍历一个数组或对象,并将其转换为一个列表。 下面是一些使用v-for指令的基本语法示例: <!– 遍历数组 –> <template> <ul> <li v-for="(item, index) in items&q…

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