Vue详细讲解Vuex状态管理的实现

 更新时间:2022年08月12日 10:58:31   作者:贤蛋大眼萌  
这篇文章主要介绍了Vuex状态管理器的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

什么是状态管理

在开发中,我们会的应用程序需要处理各种各样的数据,这些 数据需要保存在我们应用程序中的某一个位置,对于这些数据 的管理我们就称之为是状态管理

Vuex 的状态管理的基本实现(这里采用官方的图解)

Vuex的使用

安装vuex

npm install vuex

基本使用 :

store本质上是一个容器 --> 存着大部分应用中的状态。

vuex 的状态存储是响应式的,当store中的状态发生变化时,那么响应的组件也会被更新。

// main.js
import { createApp } from "vue"
import App from "./App.vue"
import store from "./store"
const app = createApp(App)
app.user(store)
app.mount("#app")
// src/store/index.js
import { createStore } from "vuex"
const store = createStore({
  state: () => ({
    counter: 100
  }),
  mutations: {
    increment(state) {
      state.counter++
    }
  }
})
export default store
//App.vue
<template>
  <div class="app">
    <!-- store 中的counter -->
    <h2>方式一:模板:App当前计数: {{$store.state.counter}}</h2>
    <h2>方式二:optionsAPI中的computed使用: {{storeCounter}}</h2>
    <h2>方式三:在compositionAPI中setup函数使用:{{counter}}</h2>
    <button @click="increment">+1</button>
  </div>
</template>
<script>
export default {
  computed: {
    storeCounter () {
      return this.store.state.counter
    }
  }
}
</script>
<script setup>
import { toRefs } from 'vue'
import { useStore } from 'vuex'
const store = useStore()
const { counter } = toRefs(store.state)
function increment () {
  store.commit("increment")
}
</script>
<style scoped></style>

单一状态树和mapState辅助函数

1. 单一状态树

意味着每一个应用就只包含一个 store实例

优点:如果状态信息包含了多个 store 实例对象,那么之后维护和管理起来就会比较麻烦。单一状态树是我们最直接的方式找到某一个状态的片段,所以维护起来也比较方便

2. mapState辅助函数

​ 如果需要获取多个状态的时候,可以使用 mapSate 辅助函数

这里有两种方式,分别是在optionsAPI 和 composition API中使用 mapState

getters的基本使用

1. getter的使用

场景:当需要我们将store中的某些属性经过一些列的变化之后再使用,这个时候可以选择使用getters

2. getters第二个参数

在上述场景中,getters接受的第一个参数是state,getters 也可以接收第二个参数

3. getters的返回函数 (了解)

getters中的函数本身,可以返回一个函数,那么在使用的地方相当于可以调用这个函数

4. mapGetters的辅助函数

mutation基本使用

改变vuex中的store的状态的唯一方法是提交mutation

注意:在pinia中是取消了mutation,后续会继续讲。搭配vue3的composition API会比vuex更好,所以这里使用 options API演示

1. mutation携带数据

很多时候我们在提交mutation的时候会携带一些数据,这个时候可以这样使用

2. mutation重要原则

mutation 必须是同步函数,即不允许使用异步函数(例如发送网络请求)

actions的基本使用

Action类似于mutation,不同在于:

  • Action提交的是mutation,而不是直接变更状态;
  • Action可以包含任意异步操作;

参数context:

  • context是一个和store实例均有相同方法和属性的context对象;
  • 可以从其中获取到commit方法来提交一个mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters;

1. actions的分发操作

2. actions的辅助函数

3. actions的异步操作

module的基本使用

​ 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象,当应用变得非常复杂时,store 对象就有可能变得相当臃肿。所以Vuex允许我们将 store 分割成模块(module)。

​ 每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块

1. module的局部状态

对于模块内部的 mutation 和 getter,接收的第一个参数是模块的局部状态对象。

2. module的命名空间

​ 默认情况下,模块内部的action和mutation仍然是注册在全局的命名空间中的。所以命名不可以重复

​ 如果我们希望模块具有更高的封装度和复用性,可以添加 namespaced: true 的方式使其成为带命名空间的模块: 当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。

3. module修改或派发根组件

​ 在action中修改root中的state,那么有如下的方式:

到此这篇关于Vue详细讲解Vuex状态管理的实现的文章就介绍到这了,更多相关Vue Vuex状态管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现钉钉的考勤日历

    vue实现钉钉的考勤日历

    这篇文章主要为大家详细介绍了vue实现钉钉的考勤日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Vue列表如何实现滚动到指定位置样式改变效果

    Vue列表如何实现滚动到指定位置样式改变效果

    这篇文章主要介绍了Vue列表实现滚动到指定位置样式改变效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • vue项目中仿element-ui弹框效果的实例代码

    vue项目中仿element-ui弹框效果的实例代码

    这篇文章主要介绍了vue项目中仿element-ui弹框效果的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • vue 修改 data 数据问题并实时显示的方法

    vue 修改 data 数据问题并实时显示的方法

    今天小编就为大家分享一篇vue 修改 data 数据问题并实时显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 在vue3中动态加载远程组件的流程步骤

    在vue3中动态加载远程组件的流程步骤

    在一些特殊的场景中(比如低代码、减少小程序包体积、类似于APP的热更新),我们需要从服务端动态加载.vue文件,然后将动态加载的远程vue组件渲染到我们的项目中,今天这篇文章我将带你学会,在vue3中如何去动态加载远程组件,感兴趣的小伙伴跟着小编一起来看看吧
    2024-08-08
  • VS编译器中引用Vue3框架的实现步骤

    VS编译器中引用Vue3框架的实现步骤

    本文主要介绍了VS编译器中引用Vue3框架的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 十分钟带你读懂Vue中的过滤器

    十分钟带你读懂Vue中的过滤器

    过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的,因为它所实现的功能也能用计算属性或者函数调用的方式来实现。这篇文章主要为大家介绍了Vue中过滤器的使用,需要的可以了解一下
    2023-03-03
  • Vue3兄弟组件传值之mitt的超详细讲解

    Vue3兄弟组件传值之mitt的超详细讲解

    之前只是浅显的使用插件进行vue开发展示,最近深入的研究了下,下面这篇文章主要给大家介绍了关于Vue3兄弟组件传值之mitt的超详细讲解,需要的朋友可以参考下
    2022-06-06
  • Vue集成three.js并加载glb、gltf、FBX、json模型的场景分析

    Vue集成three.js并加载glb、gltf、FBX、json模型的场景分析

    这篇文章主要介绍了Vue集成three.js,并加载glb、gltf、FBX、json模型,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 复刻画龙产品vue实现新春气泡兔

    复刻画龙产品vue实现新春气泡兔

    这篇文章主要为大家介绍了复刻画龙产品之使用vue实现新春气泡兔示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论