广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue之使用vuex进行状态管理详解
  • 400
分享到

vue之使用vuex进行状态管理详解

2024-04-02 19:04:59 400人浏览 安东尼
摘要

目录Vuex进行状态管理vuex状态管理基本使用vuex进行状态管理 首先学习vuex必须先知道vue原理 Vue是一个典型的MVVM框架,模型(Model)只是普通的javascr

vuex进行状态管理

首先学习vuex必须先知道vue原理

Vue是一个典型的MVVM框架,模型(Model)只是普通的javascript对象,修改它则视图(View)会自动更新。这种设计让状态管理变得非常简单而直观

Vue实现这种数据双向绑定的效果,需要三大模块:

  • Observer:能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
  • Compile:对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
  • Watcher:作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图

大概分为这么几类

vuex是什么呢

vuex是实现状态管理的工具 可以用来管理大型项目的工具

下面是一个简单的vuex的结构

index是主文件

在这里插入图片描述

//index//
import Vue from 'vue'
import Vuex from 'vuex'
import * as getters from './getters' 
import * as actions from './actions'
import * as mutations from './mutations'
Vue.use(Vuex)
const state = {
  username: '123' 
}
const store = new Vuex.Store({
  state,   
  getters, 
  actions, 
  mutations
})
export default store  

进行一个简单地账户管理

//actions文件
// 给action注册事件处理函数。当这个函数被触发时候,将状态提交到mutations中处理
export function modifyAName({commit}, name) { // commit 提交;name即为点击后传递过来的参
    return commit ('modifyAName', name)
}
 
// es6精简写法
//export const modifyAName = ({commit},name) => commit('modifyAName', name)
//motations文件
// 提交 mutations是更改Vuex状态的唯一合法方法
export const modifyAName = (state, name) => { // A组件点击更改餐馆名称为 A餐馆
  state.resturantName = name // 把方法传递过来的参数,赋值给state中的resturantName
}
 //getters文件
// 获取最终的状态信息
export const resturantName = state => state.resturantName
//组件A/methods函数
sub(){
      let log = document.querySelector("#log").value;
      let reg = document.querySelector("#reg").value;
      userapi("/users/userpsw",{name:log,psw:reg}, (mes) => {
        if(mes === 1){
          console.log(log)
          
          this.$store.commit("modifyAName",log)
          // 账户名称    
          console.log(this.$store.getters.resturantName)
          document.querySelector(".text").innerhtml = "登录成功"
          this.$router.push({ path: '/my' })
        }else{
          document.querySelector(".text").innerHTML = "登录失败"
        }
      })
    },
组件B/computed
 computed:{
      username(){//调用username即可   {{username}}
         return  this.$store.getters.resturantName
      }
  },

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

vuex状态管理基本使用

通过npm安装vuex

npm install vuex --save

使用vuex

import Vuex from 'vuex'
Vue.use(Vuex)
//赋值给一个变量,然后引入
let store = new Vuex.Store({
    ...
})
//为了更好的维护,且体现模块化,可以写在别的js文件中,然后导入
import store from './store'     //创建一个store文件夹,默认为文件夹下的index.js文件
new Vue({
  ...
  store,   
  ...
})

使用vuex基本结构

new Vuex.Store({
  //状态
  state: {
    count: 100
  },
  //将状态装饰,或刷选,以想要的结果输出
  getters: {
    hasUnit () {
      return this.state.count.filter(count => count + 1)
    }
  },
  //可以理解为变更状态的方法,第一个参数为state,可以再添加自定义参数,注意:只能进行同步
  mutations: {
    increment (state) {
      state.count++
    }
  },
  //可控制的提交mutation事件,弥补mutation无法异步
  actions: {
    increment (state) {
      setTimeout(() =>
        state.commit('increment'), 30)
    }
  }
})

为了更好的维护,往往将store文件写成以下结构 ,名字自定义,但是需要知道每个文件的作用

  • index.js:主要作为导出store,作为汇总的文件
  • state.js:作为定义的变量集合,作为一个对象导出
  • getters.js:作为主要是获取state中变量值的方法,return出state相应的值,或者length等等的一些state变量的信息
  • mutations-type.js: 作为一些方法等命名的变量,防止书写错误

  • mutaintions.js:存放修改state变量的同步方法,这里可以的方法名就是用了mutations-type.js中的变量命名,[object.value]这种方式是ES6中的语法

  • action.js:存放修改state变量的异步方法

在组件中引用,不使用mapXXXXX辅助函数情况下

state和getter:直接在computed计算属性中使用

 computed: {
    count () {
      return this.$store.state.count
    },
    hasUnit () {
      return this.$store.getters.hasUnit 
    }
  }

mutations和actions则被作为事件调用,可以放在methods,watch等等,有事件调用的时候都可以

methods: {
    add () {
      this.$store.commit('increment')    // mutations使用commit调用
    },
    asyncAdd () {
      this.$store.dispatch('increment')  // actions使用dispatch调用
    }
  }

通过mapXXXX辅助函数来引用 

先确保组件中已导入vuex的相应辅助函数:用到哪个导入哪个

import { mapState } from 'vuex'
import { mapGetters } from 'vuex'
import { mapMutations } from 'vuex'
import { mapActions } from 'vuex'
//导入多个:ES6模块
import { mapState, mapGetters } from 'vuex'

然后根据你的需求使用对应的辅助函数,前提是已经导入

  computed: {
    ...mapState([
      'count'
    ]),
    ...mapGetters([
      'addUnit'
    ])
  }
//使用this.count, this.addUnit
methods: {
    ...mapMutations([
       'increment'
    ]),
    ...mapActions({
       addNum: 'increment'
    })
    add () {
       this.increment()
    }
}
//可以被当做事件调用,为了避免命名冲突,可以使用重命名,需要使用{}而不是[]

模块:Module

当项目很大的时候,很多版块在一起容易混淆,希望每个版块的信息归每个版块下面,易于维护

//局部模块引用的第一个参数state都是自己模块里的
const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}
 
const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}
 
const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

以moduleA为例 ,可以新建一个JS文件,然后通过import导入到总的vuex管理中

const state = {
  count: 1
};
const getters = {
  get(state) {
    return state.count;
  }
};
const mutations = {
  add(state) {
    state.count++;
  },
  reduce(state) {
    state.count--;
  }
};
const actions = {
  add: ({ commit }) => {
    commit("add");
  },
  reduce: ({ commit }) => {
    commit("reduce");
  }
};
export default {
  namespaced: true,  // 使该模块带有命名空间,使它在命名上会按路径进行命名  如moduleA/state
  state,
  getters,
  mutations,
  actions
};

在使用了模块后,我们可以通过以下方式获取,这里只用了辅助函数展示

computed: {
  ...mapState({
    count: state => state.moduleA.count
  }),
  ...mapGetters({
    get: "moduleB/get"
  })
}
methods: {
  ...mapMutations(
    'moduleA', {addA:'add', reduceB:'reduce'}    // 重命名就用对象包裹
  ),
  ...mapActions(
    'moduleA', ['add', 'reduce']
  )
}

如果想引用根目录下的状态,需要传入第三个参数

const moduleA = {
  // ...
  getters: {
    addUnit (state, getters, rootState) {    //rootState为根下的状态
      return state.count + rootState.count
    }
  }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: vue之使用vuex进行状态管理详解

本文链接: https://www.lsjlt.com/news/145731.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue之使用vuex进行状态管理详解
    目录vuex进行状态管理vuex状态管理基本使用vuex进行状态管理 首先学习vuex必须先知道vue原理 Vue是一个典型的MVVM框架,模型(Model)只是普通的JavaScr...
    99+
    2022-11-13
  • Vue状态管理之使用Pinia代替Vuex
    目录1、Pinia是什么2、Pinia简单上手3、使用体验1、Pinia是什么 Pinia是一个vue的状态管理方案,是vuex团队成员开发,实现了很多vuex5的提案,更加地轻量化...
    99+
    2022-11-12
  • Vuex中状态管理器的使用详解
    目录一、Vuex是什么?二、什么时候使用Vuex三、Vuex的核心概念和API四、应用举例五、vuex中各种辅助函数的用法,可以使我们更加方便的运用vuex一、Vuex是什么? Vu...
    99+
    2022-11-13
  • vue使用Vuex状态管理模式
    目录1、基于单向数据流问题而产生了Vuex2、安装及使用3、核心及使用方法(1)State(2) Getters(3) Mutation(4) Action(5)Modules4、V...
    99+
    2022-11-13
  • Vue状态管理库Vuex如何使用
    本篇内容介绍了“Vue状态管理库Vuex如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vue.js 是一个流行的 JavaScrip...
    99+
    2023-07-05
  • vue状态管理模式之vuex如何实现
    小编给大家分享一下vue状态管理模式之vuex如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、初始vuex1.1 vu...
    99+
    2022-10-19
  • vue怎么使用Vuex状态管理模式
    这篇“vue怎么使用Vuex状态管理模式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么使用Vuex状态管理模式”文...
    99+
    2023-06-29
  • Vue中状态管理器(vuex)详解以及实际应用场景
    目录Vue中 常见的组件通信方式可分为三类Vuex简介1. State2. Getters3. Mutations4. Actions5. 使用 mapState、mapGetter...
    99+
    2022-11-16
    vuex 状态管理 vue 状态管理 vue状态管理器vuex
  • 一文详解Pinia和Vuex与两个Vue状态管理模式
    目录前言安装挂载VuexPinia修改状态vuexPiniaPinia解构(storeToRefs)gettersPiniaVuexmodulesPiniaVuex写在最后前言 Pi...
    99+
    2022-11-13
  • Vue状态管理工具Vuex工作原理解析
    目录一、什么是vuex二、vuex的工作方式三、vuex的使用场景四、工作流程五、vuex的核心API六、应用七、vuex的工作流程一、什么是vuex Vuex是vue项目的状态管理...
    99+
    2023-02-01
    Vue状态管理工具Vuex Vue状态管理器Vuex Vue Vuex
  • Vue状态管理库Pinia和Vuex使用哪个好
    今天小编给大家分享一下Vue状态管理库Pinia和Vuex使用哪个好的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Vuex ...
    99+
    2023-07-05
  • Vuex中状态管理器怎么使用
    本文小编为大家详细介绍“Vuex中状态管理器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vuex中状态管理器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Vuex是什么?Vuex在Vue项...
    99+
    2023-07-02
  • Vue3状态管理的使用详解
    目录背景 Provide / Inject 抽离共享状态提供数据 注入数据 小结 reactive 抽离共享状态使用共享状态 小结 结语 背景 随着Vue3的逐步应用,对状态管理的...
    99+
    2022-11-12
  • ReactNative 状态管理redux使用详解
    目录正文安装和配置开发环境定义数据结构然后创建行为处理函数 todoReducer创建 UI 组件:正文 有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几...
    99+
    2023-03-10
    ReactNative状态管理redux ReactNative redux
  • Vue3中Vuex状态管理学习实战示例详解
    目录引言一、目录结构二、版本依赖三、配置Vuex四、使用Vuex引言 Vuex 是 Vue 全家桶重要组成之一,专为 Vue.js 应用程序开发的 状态管理模式 + 库 ,它采用集中...
    99+
    2022-11-13
  • 集中式状态管理Vuex如何使用
    这篇文章主要讲解了“集中式状态管理Vuex如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“集中式状态管理Vuex如何使用”吧!1.vuex是什么一个专门在Vue中实现集中式状态管理的一...
    99+
    2023-07-05
  • Vue学习之Vuex的使用详解
    目录简介优缺点优点缺点使用场景示例安装Vuex并引入 1.安装vuex2.编写vuex的store3.main.js引入CounterStore.js业务代码测试简介 说明...
    99+
    2022-11-13
  • Flutter状态管理Bloc使用示例详解
    目录前言两种使用模式Cubit模式最后前言 目前Flutter三大主流状态管理框架分别是provider、flutter_bloc、getx,三大状态管理框架各有优劣,本篇文章将介绍...
    99+
    2022-11-13
    Flutter状态管理Bloc Flutter Bloc
  • React状态管理器Rematch的使用详解
    目录Rematch使用1. Rematch介绍2. Rematch特性3. 基本使用Rematch使用 1. Rematch介绍 Rematch是没有样板文件的Redux的最佳实践,...
    99+
    2022-11-13
  • 一文详解ReactNative状态管理rematch使用
    目录引言React 和 rematch 创建Todo List App创建一个 models.ts 文件创建一个...
    99+
    2023-03-10
    ReactNative状态管理rematch ReactNative rematch
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作