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)
上一篇 4天前
下一篇 4天前

相关文章

  • 实例分析vue循环列表动态数据的处理方法

    下面我就给你详细讲解“实例分析Vue循环列表动态数据的处理方法”的完整攻略。 一、问题描述 当我们需要循环列表显示数据时,如果数据是动态的,我们该怎么处理呢?比如,我们要在页面中展示一些文章列表,这些文章在不停地更新,我们需要实现哪些功能呢? 实时获取最新列表数据并展示出来 定时更新列表数据,以保证数据的及时性 点击某篇文章,能够跳转到对应的文章详情页面 二…

    Vue 3天前
    00
  • vue.js删除列表中的一行

    关于“vue.js删除列表中的一行”的完整攻略,可以分为以下几个步骤: 1. 在Vue中渲染列表 首先,在Vue中渲染出需要删除行的列表。在这个例子中,我们将使用v-for指令循环渲染一个列表,并为每个列表项添加一个删除按钮。 <template> <div> <ul> <li v-for="(item, …

    Vue 3天前
    00
  • vue实现集成腾讯TIM即时通讯

    vue实现集成腾讯TIM即时通讯 1. 安装TIM SDK 首先,我们需要在项目中安装TIM SDK,在项目根目录下执行以下命令: npm install tim-js-sdk –save 2. 创建TIM实例 安装完成TIM SDK后,我们需要在项目中创建TIM实例,代码示例如下: import TIM from ‘tim-js-sdk’; const …

    Vue 4天前
    00
  • 浅谈vue中.vue文件解析流程

    在Vue中,.vue文件是一个自定义的组件格式,包含了一个完整的Vue组件,包括模板、样式和逻辑等内容。在这里,我们将详细讲解Vue中的.vue文件解析流程。 什么是.vue文件? .vue文件是一种自定义的组件格式,主要用于Vue项目中的组件开发。每个.vue文件都代表着一个完整的Vue组件,包括模板、样式和逻辑等部分。 .vue文件通常由三个部分组成: …

    Vue 3天前
    00
  • element中el-autocomplete的常见用法示例

    当使用 Vue.js 和 Element UI 搭建网站时,使用 el-autocomplete 组件可以实现一个自动完成的输入框。以下是 el-autocomplete 的常见用法示例: 基本用法 使用 v-model 在父组件中绑定输入框的值,使用 fetchSuggestions 方法获取自动完成的选项列表: <template> <…

    Vue 4天前
    00
  • Vue实现active点击切换方法

    Vue实现active点击切换的方法有很多种,这里介绍其中的两种: 方法一:使用v-bind:class 在data中定义一个变量isActive,并设置初始值为false <script> export default { data() { return { isActive: false } } } </script> 2.通过v…

    Vue 2天前
    00
  • vue使用laydate时间插件的方法

    下面是关于“vue使用laydate时间插件的方法”的完整攻略: 一、安装laydate 在项目目录下使用npm命令安装laydate: npm install laydate –save 二、在vue中使用laydate 1. 全局引用 在main.js这个入口文件中引用laydate并使用Vue.use()将其挂载到Vue上: import Vue f…

    Vue 3天前
    00
  • vue的常用组件操作方法应用分析

    下面我就来详细讲解一下vue的常用组件操作方法应用分析。 一、组件的创建 Vue的组件是由Vue的实例构造器Vue.extend()生成的。使用组件,我们需要先定义它,然后在Vue实例的components属性中声明,最后在模板中使用即可。 1. 定义组件 定义组件就是定义一个Vue的实例构造器,它包括组件的名称、模板、数据、方法等。 // 定义组件 var…

    Vue 4天前
    00
  • Vuex 快速入门(简单易懂)

    Vuex 快速入门(简单易懂) 前言 Vuex是Vue.js的一个状态管理工具,可以方便地处理组件之间的数据共享问题。本文将介绍Vuex的基本概念和使用方法。 Vuex的基本概念 Vuex包含了五个基本概念: State:存储数据的地方,可以在组件中直接访问,但是不能直接修改 Getter:相当于State的计算属性,可以根据State计算出新的值,并缓存起…

    Vue 4天前
    00
  • 浅谈VUE uni-app 核心知识

    浅谈VUE uni-app 核心知识 什么是uni-app? uni-app 是一款基于Vue.js开发的跨平台应用开发框架,使用uni-app可以同时构建出能运行于多个平台(包括iOS、Android、H5等)的应用程序。 uni-app与其他跨平台开发框架相比,其最大的特点是具有接近原生应用的性能体验,同时具有极高的开发效率和代码复用性。此外,uni-a…

    Vue 4天前
    00