一篇文章带你吃透Vuex3的状态管理

一篇文章带你吃透Vuex3的状态管理

什么是Vuex

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理各组件共享的一些状态,使得状态管理变得简单而且容易理解。它的主要作用是用于管理Vue.js应用中的各种状态。

Vuex的结构

Vuex包含5个部分:

  • State:用于存储状态变量
  • Mutation:用于改变state中的值
  • Action:定义方法来分发Mutation
  • Getter:从state中派生出一些值
  • Module:为了解决Vuex模块化问题

安装Vuex

可以通过npm包管理器安装Vuex,也可以从CDN获取。

npm install vuex --save

使用Vuex

安装完Vuex之后,需要通过Vue.use()来启用Vuex。

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

Vue.use(Vuex)

正确的启用Vuex后,我们可以在Vue.js的组件中使用store对象对共享的数据进行操作。

<script>
export default {
  computed: {
    counter () {
      return this.$store.state.count
    }
  },
  methods: {
    increment () {
      this.$store.commit('increment')
    }
  }
}
</script>

State

State是唯一的共享数据中心,它用于存放数据。我们在组件中也可以访问state中的数据,并且我们可以在Mutation中修改state中的数据。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

我们可以通过以下语句来访问state中的数据。

this.$store.state.count

Mutation

Mutation用于修改state中的数据。Mutation必须是同步函数,并且它只能在store中被调用,而且调用也只能是commit方法。Mutation接收每个调用的参数就是当前state。

我们可以通过以下语句来调用Mutation。

this.$store.commit('increment')

Action

Action用于提交Mutation,异步的程序会在这里执行。Action可以用于提交一个或多个Mutation,并且会被commit方法触发。

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

我们可以通过以下语句来提交Action。

this.$store.dispatch('incrementAsync')

Getter

Getter可以返回计算后的属性,并且可以监控属性的变化。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  getters: {
    doubleCount: state => {
      return state.count * 2
    }
  }
})

我们可以通过以下语句来访问getter中的属性。

this.$store.getters.doubleCount

Module

Module可以帮助我们更好地组织代码,使得代码更易于维护。Module允许我们将store分解成多个模块,每个模块都有自己的state、mutation、action和getter。

const store = new Vuex.Store({
  modules: {
    moduleA: {
      state: {},
      mutations: {},
      actions: {},
      getters: {}
    },
    moduleB: {
      state: {},
      mutations: {},
      actions: {},
      getters: {}
    }
  }
})

示例说明

示例1:计数器

这个示例用一个计数器来说明Vuex的使用方法。

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

<script>
export default {
  computed: {
    count () {
      return this.$store.state.count
    }
  },
  methods: {
    increment () {
      this.$store.commit('increment')
    },
    decrement () {
      this.$store.commit('decrement')
    }
  }
}
</script>
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    },
    decrement (state) {
      state.count--
    }
  }
})

示例2:TodoList

这个示例用一个TodoList来说明Vuex的使用方法。

<template>
  <div>
    <form @submit.prevent="addTodo">
      <input v-model="newTodo">
      <button type="submit">Add Todo</button>
    </form>

    <ul>
      <li v-for="(todo, index) in todos" :key="index">
        {{ todo }}
        <button @click="deleteTodo(index)">x</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data () {
    return {
      newTodo: ''
    }
  },
  computed: {
    todos () {
      return this.$store.state.todos
    }
  },
  methods: {
    addTodo () {
      this.$store.commit('addTodo', this.newTodo)
    },
    deleteTodo (index) {
      this.$store.commit('deleteTodo', index)
    }
  }
}
</script>
const store = new Vuex.Store({
  state: {
    todos: []
  },
  mutations: {
    addTodo (state, todo) {
      state.todos.push(todo)
    },
    deleteTodo (state, index) {
      state.todos.splice(index, 1)
    }
  }
})

以上就是关于Vuex的详细讲解和两个示例。希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你吃透Vuex3的状态管理 - Python技术站

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

相关文章

  • 单页面vue引入百度统计的使用方法示例详解

    下面我将为你详细讲解使用Vue单页面应用集成百度统计的完整攻略。 步骤一:创建百度统计账号 首先,你需要到百度统计官网 https://tongji.baidu.com/ 注册并创建自己的统计账号。 在注册后,你需要添加一个网站并获取统计代码。在“网站管理” 页面,点击“添加网站”,根据指导填写网站信息。在添加成功后,会自动跳转到统计代码页面。在这里,你会看…

    Vue 2023年5月27日
    00
  • 十个有用的自定义Vue钩子函数总结

    下面详细讲解一下”十个有用的自定义Vue钩子函数总结”的攻略: 1. 什么是Vue钩子函数 Vue.js提供了很多生命周期钩子函数,我们可以在不同的阶段对应的函数中执行代码。其实,除了Vue.js官方提供的钩子函数,我们还可以自己定义钩子函数,方便我们在需要的时候进行统一处理。 2. 自定义Vue钩子函数的常用场景 2.1 全局数据加载提示 在请求全局数据时…

    Vue 2023年5月27日
    00
  • vue3获取ref实例结合ts的InstanceType问题

    获取ref实例是Vue3中常用的一种方式,可以用来访问组件内部的数据和方法。在TypeScript环境下,获取ref实例需要注意InstanceType问题。下面是一份完整的攻略,分为以下几个步骤: 步骤一:创建组件 首先我们需要创建一个Vue3组件,用来演示获取ref实例的过程。这里以一个简单的计数器组件为例: <template> <d…

    Vue 2023年5月27日
    00
  • MVVM模型在Vue中的使用详解

    MVVM是Model-View-ViewModel的缩写,它是一种前端架构模式,旨在将软件应用程序的开发和用户界面的设计分离开来。MVVM模型在Vue中的使用详解可以从以下几个方面来讲解: 1. MVVM模型在Vue中的基本原理 Vue.js是一种基于MVVM架构模式的JavaScript库,大体上遵循了MVVM的设计思路。Vue中的Model用来存储数据,…

    Vue 2023年5月28日
    00
  • 超详细的vue组件间通信总结

    既然你想了解“超详细的vue组件间通信总结”的完整攻略,那我来跟你讲解一下。 首先,我们需要知道,在Vue中,组件的通讯是非常关键的,特别是当应用变得越来越大,你需要找到一种有序、快速、可维护的方式来传递数据和事件。为此,Vue提供了几种用于处理通讯的方案。 Vue组件间通信方式主要包括下面这些: 父组件向子组件传递数据 子组件向父组件传递数据 使用Even…

    Vue 2023年5月27日
    00
  • 关于vue二进制转图片显示问题 后端返回的是byte[]数组

    下面是关于vue二进制转图片显示问题的完整攻略。 问题描述 在开发过程中,有时后端返回的数据可能是一个byte[]数组,而我们需要将其转换为图片进行展示。但是直接将该数组作为图片src的值加载时,浏览器会提示无法识别的图片格式。那么该如何处理这个问题? 解决方案 方案一 使用base64编码将二进制数据转换为base64字符串再进行展示。 // 将byte[…

    Vue 2023年5月29日
    00
  • Vue render函数使用详细讲解

    当我们想要使用Vue.js中的复杂组件来构建交互式应用程序时,我们需要使用render函数来创建虚拟DOM。使用render函数,我们可以直接返回虚拟DOM节点而不需要使用模板。本文将为您介绍Vue render函数的详细用法和示例。 什么是render函数? render函数是Vue.js中一个用于构建虚拟DOM的方法。它是一个纯JavaScript函数,…

    Vue 2023年5月28日
    00
  • vue之Vue.use的使用场景及说明

    Vue之Vue.use的使用场景及说明 简介 Vue.use 是一个用于安装 Vue.js 插件的方法。如果需要全局注册一个自定义插件或第三方插件,则需要使用该方法进行注册,例如 Vue.use(插件)。该方法会自动检测插件是否已经安装,如果已经安装,将不会多次进行安装。 使用场景 Vue.use方法的使用场景是当我们需要使所有实例都具备一些通用的功能时,而…

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