【Vue基础】Vuex的组成介绍

本文介绍了Vuex的核心组成部分,包括State作为数据源,Getter用于便捷获取数据,Mutation通过commit进行同步数据修改,Action处理异步操作并提交Mutation,以及Modules用于组织大型应用的模块化状态管理。文中还提到了在个人项目中如何应用这些概念。
摘要由CSDN通过智能技术生成

Vuex的组成介绍

在这里插入图片描述
State

  • 数据唯一来源(数据源),vuex所有的数据都会存在state中,就像一个很大的仓库,存储所有数据,可以实例化用来存储所有的数据,如何存储呢?实际上status就是一个庞大的对象,本身是一个json对象,用来存储所有的数据

Getter

  • 获取数据。本来可以通过state实例化拿到所有数据,但是getter有其存在的道理,好比是vue的computed计算属性,相似性:从现有的state来派生出一个新的state,大大方便我们获取数据,或者state派生出新的状态的时候有很大的作用

Mutation

  • 修改数据,不是通过直接修改,需要通过一个commit
    mutation来修改数据,mutation本质上就是一个function,为什么不能直接通过实例化state直接去给state里面的数据做修改,而是通过commit一个mutation,在通过mutation传入一个state,再对state进行修改呢?这里主要是因为,每次提交mutation,都会有一个记录,vue这样做是为了更方便的记录下每一个数据改变的历史和轨迹,方便于监听和回滚之类的操作。还需要注意一点,mutation的操作一定是同步的,写成异步会有很大的麻烦,具体看文档

Action

  • 提交mutation,为什么会多出这个呢?实际上mutation是同步修改数据,而往往业务需求有很多的异步操作,来修改vuex的数据状态,action里面可以进行异步操作,因为我们提交的时候mutation,mutation是通过同步修改数据。Action相当于包装了一层,可以进行任意的异步编程。来提交mutation,在通过mutation同步修改数据

Modules

面对复杂的应用程序,当管理的状态比较多时;我们需要将vuex的store对象分割成模块(modules)。

const moduleA = {
    // 通过const来定义一个moduleA,再定义一个moduleB;每个模块都包括
 // stste,mutation,action,getters等一系列概念;
 // 只是说这些状态都是在A模块里面运用的;B模块里面也会应用到;但是如果我们的项目并不需要太多的状态管理;那么我们完全可以把它定义到vuex里面去;不需要进行拆分;
 // 只有在我们的页面里面概念比较多,而又不想和别的页面进行混淆的时候;
 // 大家可以把它拆分成每个模块
  state: {
    ... },
  mutations: {
    ... },
  actions: {
    ... },
  getters: {
    ... }
}
 
const moduleB = {
   
  state: {
    ... },
  mutations: {
    ... },
  actions: {
    ... }
}
 
const store = new Vuex.Store({
   
  modules: {
   
    a: moduleA,
    b: moduleB
  }
})
 
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

在这里插入图片描述

个人项目中Vuex的运用:

例子:
在这里插入图片描述
主模块:index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

//导入committee和volunteer
import committeeModule from '@/store/committee.js'
import volunteerModule from '@/store/volunteer.js'


//存放共有数据
var state = {
   
  leftArrow:false,//左上角返回按钮,默认不显示(首页,通告,我的)
  indexPage:'/volunteer',  //首页的uri,默认为志愿者页面
  announcePage:'/volunteer/announce', //通告的uri,默认志愿者节目
  personalPage:'/volunteer/personal',  //我的uri,默认志愿者节目
  title:'首页' //标题
}

var mutations = {
   
  setLeftArrow(state,val) {
    //是否显示返回按钮
    state.leftArrow = val
  },
  setIndexPage(state,uri) {
    //更换首页uri
    state.indexPage = uri
  },
  setAnnouncePage(state,uri) {
    //更换通告的uri
    state.announcePage 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值