首页 > 其他分享 >Vuex

Vuex

时间:2022-12-24 00:11:07浏览次数:39  
标签:getters mutations actions state value Vuex store

简介​    

  在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

搭建环境

  创建主文件,通常为 src/store/index.js

// src/store/index.js

// 引入Vue核心库
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 应用Vuex插件
Vue.use(Vuex)

// 准备actions对象
const actions = {}
// 准备mutations对象
const mutations = {}
// 准备state对象
const state = {}
// 准备getters对象
const getters = {}

// 创建并暴露store
export default new Vuex.Store({
   actions,
   mutations,
   state,
   getters
})
// main.js
......
// 引入store
import store from './store'
......

// 创建vm
new Vue({
   el:'#app',
   render: h => h(App),
   store
})

基本使用

  首先介绍 state、getters、actions、mutations 四个对象

state

  state中主要用来存储需集中管理的数据

  组件中读取 Vuex 中的数据可以采用如下方式(不要直接修改 Vuex 中的数据,修改使用 action 或 mutations )

this.$store.state.XXX

getters

  当state中数据需要加工时,可使用getters加工后再使用

  例如:

// 获取10倍的数据
const getters = {
// bigSum(state){ return state.sum*10 } }

  使用:

this.$store.getters.bigSum

  getters有一个默认参数 state,可直接获取state中的数据

  正常情况下getters无需传参,但若想传参,可以采用一个小技巧,即返回一个函数,如下所示:

// 获取n倍的数据
const getters = {
    bigSum(state) => (n) =>  state.sum * n
}

  使用

this.$store.getters.bigSum(10)

mutations

  用于操作数据(state)   mutations 中的方法通常有两个参数,一个是 state,一个是传入的 value
const mutations = {
    JIA(state, value){
        // 执行操作的逻辑写在mutations中
        state.sum += value
    },
    JIAN(state, value){
        state.sum -= value
    }
}

  使用:

  通过 commit() 执行方法,需传入两个参数,一个是 mutations 中定义的方法名(字符串),一个是需要传入的数据

methods: {
    add(){
        // 没有判断数据的逻辑,所以可以直接commit操作mutations
        this.$store.commit("JIA", this.n)
    },
    jian(){
        this.$store.commit("JIAN", this.n)
    },
}

actions

  actions 通常用于响应组件中的动作,比如在提交 mutations 前,用于执行一些判断逻辑等

  如下所示,actions 的方法中通常包含两个参数

    (1) context,可以使用其 context.commit() 方法提交 mutations ,或使用 context.state 直接操作数据

    (2) value,待传入的数据

const actions = {
    jishujia(context, value){
        // context上下文中也可获取到state数据
        // 用于判断数据的逻辑写在actions中
        if(context.state.sum % 2){
            context.commit("JIA", value)
        }
    },
    jiawait(context, value){
        setTimeout(() => {
            context.commit("JIA", value)
        }, 1000);
    }
}

  使用:

  通过 dispatch 执行actions中的方法,需传入两个参数,方法名和数据

methods: {
    jishujia(){
        // 要通过actions层就要dispatch
        this.$store.dispatch("jishujia", this.n)
    },
    waitAdd(){
        this.$store.dispatch("jiawait", this.n)
    }
}

小结

  从上述介绍中我们可以总结出使用规律:

  (1)当需直接获取数据时,可使用 this.$store.state.XXX 获取数据

  (2)当需直接获取加工后的数据时,可定义 getters 并通过 this.$store.getters.XXX 获取加工后的数据

  (3)当有网络请求或其他业务逻辑,可使用 dispatch => actions提交动作 => mutations操作数据

  (4)当无需判断或简单逻辑时,可直接使用 commit =>mutations操作数据

四个map方法的使用

  每次使用时都需要 this.$store,太麻烦,Vue提供了一种映射方法可直接在组件内部操作Vuex,即为 mapState、mapGetters、mapActions 和 mapMutations。

  

 

标签:getters,mutations,actions,state,value,Vuex,store
From: https://www.cnblogs.com/xt112233/p/17001822.html

相关文章

  • vuex的使用
    1,vuex是什么:vuex是一个专门为vue开发的状态管理工具,它采用集中式存储管理应用的所有组件的状态,其核心是state。2,vuex中有什么:1)state:存放状态数据的地方,其中数据是响应式......
  • Vuex从入门到精通
    一、vuex介绍目标什么是Vuex为什么学习Vuex通信方案组件关系数据通信父子关系父传子:props;子传父:$emit非父子关系vuex(一种组件通信方案)Vuex......
  • vuex辅助函数使用
    辅助函数的认识:vuex的辅助函数有4个:mapState,mapGetters,mapMutations,mapActions辅助函数的写法:1、在页面引入import{mapState,mapGetters,mapMutatio......
  • Vue刷新vuex数据丢失
    安装依赖npminstallvuex-persistedstate使用importVuefrom'vue'importVuexfrom'vuex'importcreatePersistedStatefrom'vuex-persistedstate'Vue.use(Vuex)export......
  • vuex共享数据仓库的模块化使用
    一:概念: vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决......
  • Vuex 详解
    state:import{Module,VuexModule}from'vuex-module-decorators'@ModuleexportdefaultclassVehicleextendsVuexModule{wheels=2}等同于下面的代......
  • vuex的使用-简单存储
    在写新项目的时候,用input写了个搜索框,搜索之后获取到点击的数据,要将数据在tab中渲染出来,我思前想后,还是觉得vuex是最好的解决办法,记录一下vuex的基本用法首先是在store文......
  • Vuex极速入门
    01、什么是Vuex?1.1、为什么需要状态管理?在复杂的系统中,我们会把系统按照业务逻辑拆分为多个层次、多个模块,采用组件式的开发方式。而此时不同模块、父子模块之间的通信......
  • #yyds干货盘点#聊聊vuex的Mutations和Actions
    首先讲讲版本问题,如果使用​​vue-cli2​​模版搭建的基础项目,注意,如果使用​​vue​​版本是2,当你你默认安装​​vuex​​肯定是​​4.x​​版本了,这里需要注意的是,你要降......
  • 第一节:项目结构介绍、Vuex的应用、axios封装思路、菜单权限、按钮权限剖析
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......