vue全家桶-vuex深入讲解

Vue全家桶-Vuex深入讲解

简介

在Vue项目中,我们经常用到状态管理库Vuex来管理应用状态。Vuex通过一个集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

安装

使用npm安装:

npm install vuex --save

基本概念

State

Vuex使用一个单一状态树,用一个对象包含了全部应用层级状态。

Getter

Getter可以看作是Store的计算属性。Getter接受state作为第一个参数。

Mutation

更改Vuex状态的唯一方法是提交mutation。Mutation必须是同步函数。

Action

Action和Mutation类似,不同的是它不能直接更改状态,而是通过提交Mutation来改变状态,一般用于异步逻辑或复杂逻辑处理。

Module

当页面越来越复杂时,可以将Vuex分割成多个模块,每个模块拥有自己的state、mutation、getter和actions。不同模块的状态在全局上的state中以模块名区分。

使用

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    incrementAsync ({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  },
  getters: {
     getCount: state => state.count
  },
  modules: {
    moduleA: {
      state: {},
      mutations: {},
      actions: {},
      getters: {}
    }
  }
})

export default store

// main.js
import Vue from 'vue'
import App from './App.vue'
import store from './store'

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

示例1

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Add Count</button>
    <button @click="incrementAsync">Add Count Async</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapGetters([
      'getCount'
    ]),
    count () {
      return this.getCount
    }
  },
  methods: {
    ...mapActions([
      'incrementAsync',
      'increment'
    ])
  }
}
</script>

示例2

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    userName: ''
  },
  mutations: {
    setUserName (state, userName) {
      state.userName = userName
    }
  }
})

// 实例中使用:store.commit('setUserName', 'mark')

结语

在本篇文章中,我们深入学习了Vuex的基本概念,并通过代码示例演示了Vuex的使用。Vuex大大简化了应用的数据流管理,让我们开发更放心。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue全家桶-vuex深入讲解 - Python技术站

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

相关文章

  • vue动画—通过钩子函数实现半场动画操作

    下面我将详细讲解如何通过钩子函数实现 Vue 动画操作的完整攻略。 1. 前置知识 在学习 Vue 动画之前,需要掌握以下基础知识: Vue 的基本使用方法,包括组件、指令等。 Vue 的渲染函数,了解如何通过 render 函数来创建 Vue 组件。 Vue 中的过渡效果,了解如何使用 transition 组件实现动画效果。 2. 动画钩子函数 Vue …

    Vue 2023年5月28日
    00
  • Vue3和Vite不得不说的那些事

    下面是关于“Vue3和Vite不得不说的那些事”的完整攻略。 什么是Vue3和Vite Vue3是Vue.js在2020年9月正式发布的一次重大版本更新,Vue3相较于Vue2来说,带来许多令人激动的新特性,包括Composition API、性能优化等。其中,Composition API是最大的亮点之一,它能够让开发者更好地组织和重用组件逻辑。 Vite…

    Vue 2023年5月28日
    00
  • Vue NextTick介绍与使用原理

    Vue NextTick介绍与使用原理 Vue NextTick是Vue提供的一个API, 用于在DOM更新后执行异步回调。在前端开发中,我们经常遇到需要在DOM更新完毕后,再执行一些操作的场景,例如修改某个元素的高度或宽度等。这时候,就需要用到Vue NextTick。 NextTick使用方法 Vue中,我们可以通过以下方式使用Vue NextTick:…

    Vue 2023年5月28日
    00
  • 详解Vue的组件中data选项为什么必须是函数

    Vue.js官方文档中规定了一个重要的规则:在Vue组件中,data选项必须是函数。 为什么data选项必须是函数? 从根本上来说,这是因为JavaScript中对象和数组是引用类型,如果在组件中直接使用一个变量作为data,则它在所有实例之间共享,一旦该变量的值被修改,则所有的实例都会受到影响。 因此,为了确保每个组件实例都有自己的私有数据,并且不受其他组…

    Vue 2023年5月28日
    00
  • Vue.js 时间转换代码及时间戳转时间字符串

    对于Vue.js的时间转换,可以通过使用其提供的filters(过滤器)来实现,同时我们也可以使用moment.js这个工具库来方便地进行时间转换。 使用 Vue.js Filter 进行时间转换 在 Vue.js 中,我们可以通过定义 Filter 来实现字符串到特定格式的日期的转换,该功能类似于 AngularJS 中的 Filter。下面是一个简单的例…

    Vue 2023年5月27日
    00
  • 使用react context 实现vue插槽slot功能

    使用React Context 来实现类似于Vue 框架中的插槽 Slot 的功能主要有两个步骤: 创建一个 Context 并提供默认值 在需要使用的子组件中使用该 Context 的 Provider,然后在子组件中使用该 Context 的 Consumer 来渲染相应的内容。 具体实现过程如下: 创建 Context 在需要使用插槽 Slot 的父组…

    Vue 2023年5月28日
    00
  • vue指令以及dom操作详解

    Vue指令以及DOM操作详解 在Vue中,指令(Directive)是一个带有 v- 前缀的特殊属性。指令用于在模板中添加特殊的行为,常见的指令有v-if、v-for、v-bind、v-on等。 v-if指令 v-if指令用于根据表达式的值的真假,来切换元素的存在。例如下面这个示例: <div v-if="showFlag">…

    Vue 2023年5月27日
    00
  • vue如何从后台下载.zip压缩包文件

    从后台下载.zip压缩包文件可以用Vue.js通过axios进行异步请求和下载。以下是详细的步骤: 在Vue.js的项目中安装axios: $ npm install axios –save 在需要进行请求和下载的组件中导入axios: import axios from ‘axios’; 在需要进行请求和下载的方法中,使用axios来发送请求。对于后台返…

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