Vue中状态管理器(vuex)详解以及实际应用场景

Vue中状态管理器(Vuex)详解以及实际应用场景

一、什么是Vuex

Vuex是一个用于Vue.js应用程序的状态管理模式。它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension ,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

二、Vuex的核心概念

  1. State 状态: 在store中存储数据的对象。在组件内部通过$store.state.xxx或mapState获取数据。
  2. Getter获取器: 在store中提供了一种将状态映射为计算属性的方法,即Getter。可以在组件内部通过$store.getters.xxx或mapGetters获取。
  3. Mutation突变: 改变store中状态的唯一方法,但是仅仅是同步改变,因此不能写异步操作。在组件内部调用$store.commit('XXX',params)来触发Mutation的执行。
  4. Action行动: 异步操作 or 复杂操作的函数,在组件内部调用$store.dispatch('XXX',params)来触发Action的执行。Action中可以触发Mutation的执行。
  5. Module: 将store分割成模块,每个模块具有自己的state, mutation, action, getters。

三、Vuex详细实现

1.安装Vuex

使用npm或者yarn进行安装。

//使用npm安装
npm install vuex --save 

//使用yarn安装
yarn add vuex

2.注册store

在Vue应用程序中注册store,关于store的注册,我们应该将状态、mutations、actions、getters分别拆分到单独的文件中,按模块划分,方便维护。

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

Vue.use(Vuex);

const state = {
    count: 1
}

const mutations = { 
    add(state){   
        state.count++;
    },
    reduce(state){
        state.count--;
    }
}

const actions = {   
    addAction(context){   
        context.commit('add');
    },
    reduceAction({commit}){    
        commit('reduce');
    }
}

const getter = {
    getCount(state){
        return state.count;
    }
}

export default new Vuex.Store({
    state,mutations,actions,getter
});

3.使用Vuex

在根组件中将store绑定到Vue,使用$store.commit/ dispatch/ state/ getters来调用。

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

new Vue({
    el: '#app',
    store,   //将store注入根组件
    render: h => h(App)
});
//Example1.vue文件

<template>
    <div>
        <button @click="add">点击增加</button>
        <button @click="reduce">点击减少</button>
        <div>count{{count}}</div>
    </div>
</template>

<script>
    import { mapState,mapGetters,mapMutations,mapActions } from 'vue';
    export default {
        computed: {
            ...mapState([
                'count'
            ]),
            ...mapGetters([
                'getCount'
            ])
        },
        methods: {
            ...mapMutations([
                'add',
                'reduce'
            ]),
            ...mapActions([
                'addAction',
                'reduceAction'
            ])
        }
    }
</script>

4.命名空间

当store中模块化的数据过多时,可能会出现命名冲突的问题,Vuex提供了命名空间的方式来避免这种问题。

//navbar.js 文件
const navbar = { 
    state:{
        username: 'John' 
    },
    mutations:{ ... },
    actions:{ ... },
    getters:{
        getUsername(state,getters,rootState){ 
            return state.username;
        }
    }
}
export default navbar;
//store.js文件
import navbar from './navbar.js';

export default new Vuex.Store({
    modules: {
        navbar: navbar,
    }
})

当使用命名空间时,得注意在方法访问时,应该在组件中传入参数{root: true},来使其找到正确的命名空间store。

示例代码如下:

<button @click="$store.commit('navbar/add',null,{ root: true })">+</button>

5.异步操作

如果想要执行异步操作的方法,可以使用actions,并进行封装,最后在mutations中进行数据操作。

示例代码如下:

//store.js文件
const actions = {
    async getMarket({ commit }) {
        const res = await api.getMarket();
        commit('setMarket',res.data);
    }
}

const mutations = {
    setMarket(state, market) {
        state.market = market;
    }
}

示例代码2:

//store.js文件
const actions = {
    getMovies({ state, commit }) {
        return new Promise((resolve, reject) => {
            Vue.http.get(`${state.baseUrl}/in_theaters?start=0&count=10`)
                .then(res => {
                    let movies = res.body.subjects.map(item => ({
                        title: item.title,
                        imgUrl: item.images.small
                    }));
                    commit('setMovies', movies);
                    resolve();
                }, err => {
                    reject(err);
                });
        });
    }
}

const mutations = {
    setMovies(state, movies) {
        state.movies = movies;
    }
}

四、Vuex的应用场景

  1. 在大型单页面应用中,状态管理变得相对复杂,使用Vuex可以非常方便的进行状态管理。
  2. 存放全局变量,比如用户信息、菜单控制、路由控制等。
  3. Angular和React等框架中也提供了类似的状态管理服务,Vue也不例外,Vuex的出现是Vue为用户带来的福利之一,相当于团队协作中的状态管理的利器。

总之,在不同的应用场景下,使用Vuex可以帮助我们更好地实现状态管理。同时,合理地运用Vuex,还可以让开发者在大型项目中更好地进行团队协作和代码维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue中状态管理器(vuex)详解以及实际应用场景 - Python技术站

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

相关文章

  • Vue插件打包与发布的方法示例

    当我们开发Vue.js插件时,我们通常需要对插件进行打包,并发布到npm上,供其他开发者使用。以下是Vue插件打包与发布的方法示例: 1. 打包插件 首先,我们需要使用npm进行插件打包,使用以下命令进行安装相关的开发依赖: npm install –save-dev vue-cli-plugin-library 接下来,使用命令行工具进行打包,可以使用以…

    Vue 2023年5月28日
    00
  • vue 绑定使用 touchstart touchmove touchend解析

    下面是针对“Vue 绑定使用 touchstart touchmove touchend 解析”的解析攻略: 1. 什么是 touch 事件? Touch 事件是指通过触摸用户界面产生的事件,分为三个部分:touchstart、touchmove、touchend。通常用于移动设备上。 2. Vue 绑定 Touch 事件 在 Vue 实例上,可以通过 @t…

    Vue 2023年5月28日
    00
  • Vue 中 createElement 使用实例详解

    下面我给出“Vue 中createElement 使用实例详解”的完整攻略,包括基本语法和两条示例说明。 What is createElement? createElement 是 Vue 的一个渲染函数,它通过 JavaScript 代码的方式生成虚拟 DOM。通过 createElement 我们能够在 JS 代码中定义 Vue 的组件,从而实现动态渲…

    Vue 2023年5月29日
    00
  • Vue常用的修饰符及应用场景解读

    下面是“Vue常用的修饰符及应用场景解读”的完整攻略。 修饰符简介 Vue.js通过修饰符的方式,为指令提供了多种功能扩展。接下来介绍Vue常用的修饰符及应用场景。 .stop 修饰符.stop可以阻止事件冒泡,即在事件被触发后该元素的父元素不会再次触发该事件。 例如,以下代码段中,div的点击事件不会触发li的点击事件: <div @click=&q…

    Vue 2023年5月28日
    00
  • vue 项目优雅的对url参数加密详解

    下面我将详细讲解“vue 项目优雅的对url参数加密详解”的完整攻略。 1. 为什么需要对URL参数加密? 在前端开发中,我们经常会需要将一些敏感信息或者重要参数放在URL中传递,例如用户ID、订单编号等等。而如果这些参数没有加密,在传输过程中就很容易被黑客或者攻击者窃取和篡改。因此,对URL参数加密是非常有必要的。 2. 实现方案 Vue项目优雅的对URL…

    Vue 2023年5月27日
    00
  • 基于Vue实现Excel解析与导出功能详解

    基于Vue实现Excel解析与导出功能详解 介绍 在前端应用程序中,Excel文件通常不是一个很方便的东西。 Vue.js 提供了一些工具来处理Excel文件,让使用Excel的经验更加愉快。本文将介绍如何使用Vue.js和一些插件来解析Excel文件并导出Excel文件。 主要步骤 步骤1:设置Vue.js应用 首先,让我们创建一个新的Vue.js应用程序…

    Vue 2023年5月27日
    00
  • 详解vue 数组和对象渲染问题

    详解vue 数组和对象渲染问题 在使用Vue进行数据绑定时,数组和对象是常用的数据类型。本文将对Vue数组和对象的渲染问题进行详尽的讲解,并提供两条示例说明,以帮助读者快速掌握数组和对象的渲染方法。 数组渲染 数组渲染是Vue中常见的数据绑定方式,常用的渲染方法有v-for和v-if。v-for可用于渲染数组中所有元素,而v-if则可用于根据数组元素的值来判…

    Vue 2023年5月28日
    00
  • vue-cli V3.0版本的使用详解

    vue-cli V3.0版本的使用详解 1. 什么是Vue CLI Vue CLI是一个官方开发的用于快速搭建Vue.js项目的脚手架工具。 Vue CLI V3.0版本是在Vue CLI V2版本的基础上进行升级,提供了以下新特性: 更快的构建速度 灵活的插件机制 更友好的用户体验 更好的自定义配置 2. Vue CLI的安装 在终端中运行以下命令,全局安…

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