Vue3中Vuex状态管理学习实战示例详解

 更新时间:2022年06月30日 10:04:39   作者:天問  
这篇文章主要为大家介绍了Vue3中Vuex状态管理学习实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

Vuex 是 Vue 全家桶重要组成之一,专为 Vue.js 应用程序开发的 状态管理模式 + 库 ,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

一、目录结构

demo/
    package.json
    vite.config.js
    index.html
    public/
    src/
        api/
        assets/
        common/
        components/
        store/
            index.js
            modules/
                user.js
                common.js
        views/
            index.vue
        App.vue
        main.js            

二、版本依赖

vite: ^2.0.0
vue: ^3.2.8
vuex: ^4.0.0

三、配置Vuex

为了避免所有状态集中到一个对象或一个文件而变得臃肿,所有会按照不同的产品或业务线将状态树切割成多个 模块 (module),并配置各自的 命名空间 (namespaced),防止状态重复冲突。

  • 3-1.配置src/store/index.js文件。
// src/store/index.js
import Vuex from 'vuex'
import User from './modules/user'
import Common from './modules/common'
export default new Vuex.Store({
    modules: {
      User,
      Common,
    }
})
  • 3-2.配置src/store/modules/user.js文件。
// src/store/modules/user.js
import axios from 'axios'
const SET_USER_NAME = 'SET_USER_NAME'
const SET_RANDOM_IMG = 'SET_RANDOM_IMG'
export default {
  namespaced: true,
  state: {
    username: 'Tom',
    randomImg: 'https://images.dog.ceo/breeds/bulldog-french/n02108915_8258.jpg',
  },
  getters: {
    getUsername (state) {
      return state.username
    },
    getRandomImg (state) {
      return state.randomImg
    },
  },
  mutations: {
    [SET_USER_NAME]: (state, username)=>{
      state.username = username
    },
    [SET_RANDOM_IMG]: (state, randomImg)=>{
      state.randomImg = randomImg
    },
  },
  actions: {
    async setUsername ({dispatch, commit, getters}, data) {
      let username = getters.getUsername
      return new Promise((resolve, reject) => {
        setTimeout(()=>{
          commit('GET_USER_NAME', data)
          resolve(data)
        }, 2000)
      })
    },
    async setRandomImg ({dispatch, commit, getters}, data) {
      // let randomImg = getters.getRandomImg
      return new Promise((resolve, reject) => {
        axios.get('https://dog.ceo/api/breeds/image/random').then((res) => {
          let img = res.data.message
          commit('SET_RANDOM_IMG', img)
          resolve(img)
        })
      })
    },
  },
}
  • 3-3.在src/main.js入口文件中注册使用Vuex。
// src/main.js
import { createApp } from 'vue'
import router from './router'
import store from './store'
import App from './App.vue'
// ...
const app = createApp(App)
app.use(router).use(store);
app.mount('#app')

四、使用Vuex

  • 这里主要介绍一下在Vue3的Composition API中的使用。
// src/views/index.vue
<template>
    <div>
        <van-image
                round
                lazy-load
                width="200"
                height="200"
                :src="img">
            <template #loading>
                <van-loading type="spinner" size="30" />
            </template>
        </van-image>
        <br>
        <van-button type="primary"
                    icon="search"
                    zise="mini"
                    text="随机dog"
                    :loading="loading"
                    @click="getImg"
                    color="linear-gradient(to right, #ff6034, #ee0a24)"
                    loading-text="loading..." />
    </div>
</template>
<script>
    import { ref, computed } from 'vue'
    import { useStore } from 'vuex'
    export default {
        setup () {
            const { state, getters, commit, dispatch } = useStore()
            let img = computed(()=>getters['User/getRandomImg'])
            let loading = ref(false)
            const getImg = async () => {
                loading.value = true
                await dispatch('User/setRandomImg')
                loading.value = false
            }
            return {
                img,
                loading,
                getImg,
            }
        },
    }
</script>

提示: 为了访问 state 和 getter,需要创建 computed 引用以保留响应性,这与在 Options API 中创建计算属性等效。

以上就是Vue3中Vuex状态管理学习实战示例详解的详细内容,更多关于Vue3 Vuex状态管理的资料请关注脚本之家其它相关文章!

相关文章

  • vue和js中实现模糊查询方式

    vue和js中实现模糊查询方式

    这篇文章主要介绍了vue和js中实现模糊查询方式,具有很好的参考价值,希望对大家有所帮助。也希望大家多多支持脚本之家
    2022-08-08
  • Vue实现路由跳转至外界页面

    Vue实现路由跳转至外界页面

    这篇文章主要介绍了Vue实现路由跳转至外界页面方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)

    Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)

    本文通过实例代码给大家介绍了Vue表单绑定(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)的相关知识,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Vue Router初始化路由信息详解

    Vue Router初始化路由信息详解

    这篇文章主要为大家详细介绍了Vue Router初始化路由信息的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-11-11
  • vue插件tab选项卡使用小结

    vue插件tab选项卡使用小结

    这篇文章主要为大家详细介绍了vue插件tab选项卡的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Vue动态组件表格的实现代码

    Vue动态组件表格的实现代码

    这篇文章主要介绍了Vue动态组件表格的实现代码,包括框架结构组件,文中还给大家封装了几个组件,有按钮组件、图片组件、滑动开关,结合示例代码给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • 前端+接口请求实现vue动态路由

    前端+接口请求实现vue动态路由

    在Vue应用中,结合前端和后端接口请求实现动态路由,可根据用户权限动态生成路由,提高安全性与灵活性,本文就来介绍一下前端+接口请求实现vue动态路由,感兴趣的可以了解一下
    2024-09-09
  • vue form check 表单验证的实现代码

    vue form check 表单验证的实现代码

    这篇文章主要介绍了vue form check 表单验证的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Nuxt pages下不同的页面对应layout下的页面布局操作

    Nuxt pages下不同的页面对应layout下的页面布局操作

    这篇文章主要介绍了Nuxt pages下不同的页面对应layout下的页面布局操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 前端vue2使用国密SM4进行加密、解密具体方法

    前端vue2使用国密SM4进行加密、解密具体方法

    SM4是一种对称加密算法,类似于AES,主要用于数据的批量加密,如文件加密、数据库加密、网络通信数据加密等,这篇文章主要给大家介绍了关于前端vue2使用国密SM4进行加密、解密的相关资料,需要的朋友可以参考下
    2024-07-07

最新评论