广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >一文轻松理解Vuex
  • 406
分享到

一文轻松理解Vuex

2024-04-02 19:04:59 406人浏览 独家记忆
摘要

目录概述Vuex四大对象state的用法mutations的用法getters的用法actions的用法Vuex的适用场景概述 Vuex 是一个专为 vue.js 应用程序开发的状态

概述

Vuex 是一个专为 vue.js 应用程序开发的状态管理模式(官网地址:https://vuex.vuejs.org/zh/)。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

换成我们大白话来说:Vuex就是一个状态管理模式,可以简单的理解为一个全局对象,然后我们可以修改这个全局对象里面的属性或者添加方法,但是我们不能像传统JS的那种直接赋值形式来修改,我们必须得按照Vuex给我们提供的规则来修改;

Vuex的存在就是应用于解决各个组件之间传值的问题的,说白了就是看我们传统的vue父子组件传值麻烦以及弊端所给我们带来的福利;这一点官网说的很清楚:

提示:本文将以模块导入导出的形式来使用vuex,本文略微有点长,希望耐心的看完,当然有条件的话跟着敲一遍效果会更好!

Vuex四大对象

分别是state、mutations、getters、actions;

state:Vuex中的数据源,我们所需要的公共数据都是存储在这,可以简单理解为一个透明的仓库,可以通过this.$store.state.变量名来访问这个仓库里面的数据源;

mutations:mutations相当于是这把仓库的钥匙,只有通过提交mutations才能进行修改数据源操作,也就是说你想更改这个仓库里面的数据就只有通过mutations来进行修改(this.$store.commit("方法名"));

getters:getters类似于vue中的computed属性,getters的返回值会根据state中所依赖的值的状态修改来进行改变,如果getters中依赖的state中的值没有变化,直接读的是缓存,如果有变化这里也会发生相应的变化,可以用于监听state的值的变化;这里的getters可以理解为state这个仓库的保安,如果state的数据发生变化,这个保安就会采取相应措施进行相应变化,如果没有发生变化,则啥事没有则继续混吃等死(哈哈哈,不知道比喻恰不恰当,但是是这个意思,大家理解就好,别杠精)

actions:actions和mutations很类似,只是mutations官方规定只能进行同步操作,而actions里是可以进行异步操作的;也就是说我们需要进行异步操作需要在actions中来进行,然后就是actions提交的是mutations,而不是直接修改状态的,也就是说进入这个仓库修改数据,要先去拿到钥匙才能修改,所以actions是提交给mutations再去执行mutations的方法的:

state的用法

首先我们新建一个项目,搭建vue的环境我们这里就不多赘述了,毕竟本文是讲述vuex的;先在项目中安装vuex:

安装vuex命令:npm install vuex --save

安装完vuex之后我们在src的目录下新建一个vuex文件夹,同时在vuex文件夹中新建一个store.js文件:

store.js:  


import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex);
const state={
  number:1
}

export default new Vuex.Store({
  state,
})

然后我们在main.js中引用store.js,并将实例化对象的时候加入store对象

main.js  


import Vue from 'vue'
import App from './App'
import router from './router'
//引用store.js
import store from './vuex/store'

Vue.config.productionTip = false



new Vue({
  el: '#app',
  router,
//实例化的时候加入store对象
  store,
  components: { App },
  template: '<App/>'
})

然后修改一下我们的App.vue文件

App.vue


<template>
  <div id="app">
    <img src="./assets/loGo.png">
//视图层加数据方便观察
    <p>{{this.$store.state.number}}</p>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -WEBkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

通过上述代码我们可以看到,我们在App.vue中加入了一个p标签,vuex规定:如果我们需要读取vuex中的数据,也就是state的数据源仓库,我们必须通过this.$store.state.变量名访问

mutations的用法

如果我们需要修改vuex中的数据源,我们可以通过提交mutations来进行修改;

首先我们需要在我们的视图层加个按钮来控制:

App.js


<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>{{$store.state.number}}</p>
    //加个按钮触发事件修改数据源
    <button @click="add">按钮</button>
  </div>
</template>

<script>
export default {
  name: 'App',
  methods:{
    add(){
    //要修改数据源就要根据vuex规定的方法来
      this.$store.commit('addFunction');
    }
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
    

然后修改我们的store.js:


import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex);
const state={
  number:1
}

//添加mutations对象,state参数能获取到上面的state
const mutations={
  addFunction(state){
    return state.number+=1;
  }
}

//这里一定要记得要加入到实例中,不然会报错
export default new Vuex.Store({
  state,
  mutations
})

我们可以很直观的看到,通过this.$store.commit('方法名')来提交mutations修改数据源,当然我们的mutations也是可以接收参数的,第一个参数为mutations的方法名,第二个参数为mutations需要接收的参数,这样我们的mutations就变得更加的灵活;

getters的用法

getters类似于vue的computer用法,可以监听state数据源这个仓库的数据变化,如果getters依赖state的数据发生了变化,getters中依赖的数据发生了变化state也会发生变化

首先我们可以在store.js中添加以下代码:


import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex);
const state={
  number:1
}

const getters={
    //通过方法触发  state是上面的state对象,能读取state的值
  addFunction(state){
    return state.number++;
  }
}
export default new Vuex.Store({
  state,
//这里一定要记得在实例化的时候加入对象
  getters
})

App.vue中的视图我们可以这样更改:


<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>页面的值:{{$store.state.number}}</p>
    //加入一个标签跟页面的值做对比
    <p>我的getters的值:{{$store.getters.addFunction}}</p>
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

通过上述代码以及视图层我们可以清晰的看到,当我们操作了getters的时候,触发了getters的addFunction方法,addFunction方法会改变state.number的值,这个时候number的值已经为2了,所以页面上会显示值为2,因为++在后,所以getters此时的值为1,也就是说当getters依赖的state.number的值在getters中发生变化的时候,state.number就会发生变化,如果state.number没有发生变化,此时getters会优先读缓存;

actions的用法

actions对象里面主要是进行异步操作,类似于mutations,不同的是actions通过提交mutations来进行更改数据,而不是直接变更数据状态;

首先我们可以更改store.js中的代码:


import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex);
const state={
  number:1
}
const mutations={
  addFunction(state){
    return state.number++;
  }
}
const getters={
  addFunction(state){
    return state.number++;
  }
}
//context是具有store实例一样的属性和方法的对象
const actions={
  addFunction(context){
    context.commit("addFunction");
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters,
//这里记得要在实例化的时候要加上
  actions
})

App.vue中代码修改为:


<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>页面的值:{{$store.state.number}}</p>
     <button @click="add">按钮</button>
  </div>
</template>

<script>
export default {
  name: 'App',
  methods:{
    add(){
//actions中通过this.$store.dispatch来提交mutations进行修改
      this.$store.dispatch("addFunction")
    }
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

Vuex的适用场景

在项目开发中,可能会有很多数据或者参数我们可能需要多次读取或者修改,像购物车等类似功能,这个时候我们的就可以用vuex来实现;vuex毕竟只是一个状态管理模式,状态管理模式是给我们提供方便的,但不是必需的,因为状态管理能做的事通过其他途径和办法也能实现。其实个人觉得vuex跟localStorange有点相似,都是用于存储和修改数据,为了解决跨页面数据丢失问题;

以上就是一文轻松理解Vuex的详细内容,更多关于Vuex的资料请关注编程网其它相关文章!

--结束END--

本文标题: 一文轻松理解Vuex

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

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

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

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

下载Word文档
猜你喜欢
  • 一文轻松理解Vuex
    目录概述Vuex四大对象state的用法mutations的用法getters的用法actions的用法Vuex的适用场景概述 Vuex 是一个专为 Vue.js 应用程序开发的状态...
    99+
    2022-11-12
  • 一文轻松了解Python中类的继承
    目录1. 单继承2. 继承中的方法重写3. 多继承总结1. 单继承 继承的主要作用是实现代码的重用。继承使得子类拥有父类的方法和属性。直接来看一个例子吧。 class animal:...
    99+
    2022-11-11
  • 一文带你轻松掌握Promise
    回调函数回调函数的定义非常简单:一个函数被当做一个实参传入到另一个函数(外部函数),并且这个函数在外部函数内被调用,用来完成某些任务的函数。就称为回调函数回调函数的两种写法(实现效果相同):const text = () => { ...
    99+
    2023-05-14
    javascript promise
  • 一文教你如何用Python轻轻松松操作Excel,Word,CSV
    目录Python 操作 Excel常用工具xlrd & xlwt & xlutils 介绍安装库写入 Excel读取 Excel修改 excel格式转换操作Pytho...
    99+
    2022-11-13
  • 一文轻松了解v-model及其修饰符
    目录前言v-model的修饰符:lazytrimnumberv-model在不同input类型以及在其他元素上的使用1.除了在以外,还能在input元素为其他类型上使用2. v-mo...
    99+
    2022-11-12
  • 一篇文章轻松了解SpringBoot配置高级
    目录前言@ConfigurationProperties使用场景小结宽松绑定/松散绑定总结前言 本文介绍的是SpringBoot配置高级部分,课程是跟着黑马走的,所以会有一些借鉴,当...
    99+
    2022-11-13
    springboot配置高级 springboot 配置
  • 一篇文章让你轻松理解C++中vector和list区别
    目录一张表格让你理解vector和list区别例子总结一张表格让你理解vector和list区别 区别vectorlist数据结构:顺序表(动态数组)环形双向链表物理空间:连续的非连...
    99+
    2022-11-12
  • 一篇文章带你轻松搞懂Golang的error处理
    目录Golang中的errorerror的几种玩法哨兵错误自定义错误类型Wrap errorGolang1.13版本error的新特性errors.UnWrap()errors.Is...
    99+
    2022-11-13
  • 一文轻松了解ASP.NET与ASP.NET Core多环境配置对比
    目录前言asp.net下的多环境配置如何增加额外的环境配置aspnetcore下的多环境配置什么是配置提供程序开发阶段的多环境发布阶段的实现多环境配置EnvironmentName ...
    99+
    2022-11-13
  • Word文档怎么轻松处理图片
    这篇文章给大家分享的是有关Word文档怎么轻松处理图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一:图片原始尺寸还原我们在Word文档插入图片时,Word会自动将图片进行缩小,以适应Word排版。插入图片,在...
    99+
    2023-06-04
  • 轻松学会Java导出word,一篇文章就够了!
    很多小伙伴在工作中,可能又这样一个需求:根据word模板去填充数据,变成我们想要的word文档,这是很多刚进入职场的小白都会碰到的需求。 当遇上这种需求,我们可以通过这篇文章要讲的poi-tl ...
    99+
    2023-09-22
    java word 开发语言
  • 一篇文章让你轻松记住js的隐式转化
    目录前言一、包装类Boolean()扩展Number()引用类型转换Number原始类型转Number还有这些混淆点是需要注意的:扩展String()Object.prototype...
    99+
    2022-11-12
  • 文件同步难点:PHP Spring 能否轻松解决?
    随着信息技术的发展,数据的同步变得越来越重要,尤其是在企业和团队协作中。文件同步是其中一个关键问题,因为它需要同时处理多个文件的创建、修改和删除等操作。在这个领域,PHP和Spring是两个常用的技术,它们都有各自的优势和劣势。那么,PH...
    99+
    2023-08-06
    spring 文件 同步
  • 分享一款php代码编码转换工具,轻松处理中文乱码!
    随着互联网的发展,PHP作为脚本语言的应用范围也越来越广泛,尤其在Web开发中,PHP的应用更是日益增多。然而,由于不同的操作系统或编辑器等环境的不同,中文乱码问题也经常困扰着开发者。因此,本文将介绍一款PHP代码编码转换工具,帮助开发者快...
    99+
    2023-05-14
    php
  • 解析HikariCP一百行代码轻松掌握多线程
    目录引言核心数据结构获取连接归还连接知识点引言 Java届很难得有读百十行代码就能增加修炼的机会,这里有一个。 通常,我在看书的时候一般不写代码,因为我的脑袋被设定成单线程的,一旦同...
    99+
    2022-11-13
  • 了解Python文件索引的工作原理,轻松实现文件快速加载。
    Python文件索引是Python解释器在加载模块时用来快速查找文件位置的一种机制。它通过在模块搜索路径中建立索引缓存,从而实现了文件位置的快速定位。在本文中,我们将详细介绍Python文件索引的工作原理,并演示如何使用它来实现文件的快速加...
    99+
    2023-09-28
    文件 索引 load
  • 一文轻松了解vlan端口模式之Trunk是什么,开发必备通信
    Trunk是一个网络术语,用于描述在VLAN(虚拟局域网)中用于传输多个VLAN流量的端口模式。在计算机网络中,VLAN被用来将物理...
    99+
    2023-09-20
    vlan
  • Python编程:轻松搞透上下文管理器(Context Manager)
    前言本文聚焦在Python的上下文管理的讲解和应用。还是通过代码实例的方式,对照理解和学习,以达到“多快好省”的理解、掌握和应用。闲话少叙,开始——1.何为上下文管理器上下文管理器是一个对象,它定义了在执行with语句时要建立的运行时上下文...
    99+
    2023-05-14
    编程 管理器 协议
  • Python轻松管理与操作文件的技巧分享
    目录一、读写文件二、遍历文件夹三、创建与删除文件夹四、文件路径操作五、总结一、读写文件 在 Python 中,我们可以使用 open() 函数打开文件,with 语句可以自动关闭文件...
    99+
    2023-05-19
    Python操作文件技巧 Python操作文件 Python 文件
  • 轻松省电 Win7系统电源管理切换有捷径[图文讲解]
    大家在使用笔记本电脑时,在不同情况下使用不同的电源管理方案是很经常的事情。除了Win 7系统内自带的电源管理设定以外,用户还可以通过第三方安装软件的安装来实现管理电源。但是无论是前面哪一种方式,都免不了需要用户经过多步频...
    99+
    2023-05-29
    Win7系统 电源管理 轻松省电 管理 电源 捷径 系统 省电 Win7
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作