vuex中的this.$store.commit和dispatch()使用

这篇具有很好参考价值的文章主要介绍了vuex中的this.$store.commit和dispatch()使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、为什么要用vuex?

在vue的项目里常常会遇到父子组件间需要进行数据传递的情况,我们可以用熟悉的props 或者 $emit 等方式进行父子组件通信,但是,在项目稍微大一点的情况中,面对众多的不相关的平行组件,并且很多数据需要多个组件循环使用,这个时候在这些组件间传递数据,使用上述方法会比较麻烦,项目代码变得冗长,并且不利于组件的复用,提高了耦合度。

为了解决这一问题,我们需要使用Vue 的状态管理工具 Vuex

Vuex好处:

  • 既使非父子组件间的数据共享也能变得简单明了
  • 让程序变得更加可维护(将数据抽离了出来)
  • 只要仓库里面的数据发生了变化,在其他组件里面数据被引用的地方也会自动更新

二、使用场景

平行组件之间传递数据,很多数据需要多个组件循环使用;如:用户的登录,注册;

有的时候我们只是需要动态的从一个组件中获取数据(官网称为“组件层级”:是个独立的控件,作用范围只在组件之内)然后想放到一个被官网称作“应用层级”(在项目的任意地方都可以随时获取和动态的修改,在修改之后,vue会为你的整个项目做更新)的地方。

三、环境配置与使用

1.安装vuex 

npm install vuex --save

2.新建文件夹store,在文件夹内新建index.js文件,用来组装模块并导出 store 的文件

index.js文件:

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

// 告诉 vue “使用” vuex
Vue.use(Vuex)

// 创建一个对象来保存应用启动时的初始状态

// 需要维护的状态

const store = new Vuex.Store({
    
  state: {
    // 放置初始状态 app启动的时候的全局的初始值
   login: false,//用户登录状态
  }
    
})

// 整合初始状态和变更函数,我们就得到了我们所需的 store
// 至此,这个 store 就可以连接到我们的应用中
export default store

 然后在main.js/main.ts 中注册store

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './../store/index'

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
})

这一步完成后,我们可以再任意组件中使用store中的数据,使用方法也很简单,就是使用计算属性返回store中的数据到一个属性上,然后在你模板中就可以使用这个属性值了:

接下来在任意组件中使用

export default {
  ...
  data(){
	  value : "这又是修改后的value",
	},
  computed: {
    getTxt() {
      return this.$store.state.testTxt.tips;
    }
  },
   methods: {
    modifyTxt: function() {
      this.$store.commit('modifyTips', this.value)
    }
  }
  ...
}

然后在index.js文件里可以修改

	const store = new Vuex.Store({
		  state: {
		   	   // 初始化全局的一个变量
		   	   testTxt: {"tips":"这是一条vuex的数据","id":1}
		  },
		   mutations: {
			    modifyTips(state,msg) {
			      state.testTxt.tips= msg;
			    }
		  }
})
export default store

3. 上面是一个简单的示例,稍微扩展一下:

初始化store.js

一般放到src/store/store.js下面

import Vue from "vue";
import Vuex from "vuex";
 
Vue.use(Vuex)
 
const store = new Vuex.Store({
 state: {
    test:'x'
  },
  mutations: {
    changetest(state, xxx) {
      state.test= xxx
    }
  },
  actions:{
     changetest(context, xxx) {
      context.commit('changetest',xxx)
    }
  },
  getters: {
    test2: state => state.test
  }
})
export default store;

state:相当于Vue的data

mutations:类似于事件,每个 mutation 都有一个字符串的事件类型 (type)和 一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数

actions: Action 类似于 mutation,不同在于Action 提交的是 mutation,而不是直接变更状态,Action 可以包含任意异步操作

getters:可以认为是 store 的计算属性,就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,接受 state 作为其第一个参数

接下来可以用了。

使用Vuex

打开main.js,导入

import Vue from "vue";
import App from "./App.vue";
import store from "./store";
 
new Vue({
  store,
  render: h => h(App)
}).$mount("#app");

 现在可以在所有App所有子组件里面使用Vuex了

如何使用 state

子组件能通过 this.$store 访问到

this.$store.state.test
// x

 如何使用 mutations

子组件能通过 this.$store.commit 访问到

this.$store.commit('changetest',xxx)

 它会去把 changetest 提交到 mutation 执行 ,第二个是载荷(可以理解为参数),大多数载荷应该是一个对象,这样可以包含多个字段并且记录的 mutation 会更易读

如何使用 actions

子组件能通过 this.$store.dispatch 访问到

this.$store.dispatch('changetest'xxx)

它会去把 changetest 分发到 actions 在通过 actions 提交到 mutation 执行

如何使用 getters

子组件能通过 this.$store.getters 访问到

this.$store.getters.test2
//x

四、与dispatch比较

1. dispatch: 含有异步操作
例如向后台提交数据,this.$store.dispatch('action方法名',值)

存储:

this.$store.dispatch('initUserInfo',friend);

取值:

this.$store.getters.userInfo;

2. commit:同步操作
this.$store.commit('mutations方法名',值)

存储:

this.$store.commit('initUserInfo',friend);

取值:

this.$store.state.userInfo;

  参考:vuex中的this.$store.commit - 木昜 - 博客园​​​​​小白VUE学习笔记3:Vuex的this.$store.commit和在Vue项目中引用公共方法_Funfction_Zero的博客-CSDN博客

 vue store 存储 dispatch 和 commit的区别_前端打工人的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-727055.html

到了这里,关于vuex中的this.$store.commit和dispatch()使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue中vuex的五个属性和基本用法,另加js-cookie的使用

    VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。 state, getters, mutations, actions, modules。 1. state: vuex的基本数据,用来存储变量 2. geeter: 从基本数据(state)派生的数据,相当于state的计算属性 3.

    2024年02月14日
    浏览(30)
  • Vue.js组件精讲 第4章 组件的通信2:派发与广播——自行实现dispatch和broadcast方法

    上一讲的 provide / inject API 主要解决了跨级组件间的通信问题,不过它的使用场景,主要是子组件获取上级组件的状态,跨级组件间建立了一种主动提供与依赖注入的关系。然后有两种场景它不能很好的解决: 父组件向子组件(支持跨级)传递数据; 子组件向父组件(支持跨

    2024年04月13日
    浏览(38)
  • 前端Vue入门-day07-Vuex入门

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境  创建一个空仓库 state 状态 1. 提供数据: 2. 使用数据: mutations  辅助函数 - mapMutations actions 辅助函数 - mapAc

    2024年02月14日
    浏览(30)
  • 前端vue入门(纯代码)21_vuex

    努力不一定成功,但是,不努力一定很轻松!!! 【 23.Vuex 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 问题1:Vuex是什么? 【官方理解1】:Vuex 是一个专为 Vue.js 应用程序开发的 状态【数据】管理模式 。它采用集中式存储管理应用的所有组件的状态,并以相应

    2024年02月13日
    浏览(41)
  • 我们在 Vue 3 中使用 setup 函数写组件,如何获取类似于 Vue 2 中的 this?

    Vue.js 是一个非常流行的前端框架,在 Web 前端开发中有着广泛的应用。在 Vue 2 中,我们通常使用 this 来引用当前组件实例(Component Instance),并通过它来访问组件的属性、方法和生命周期钩子等。而在 Vue 3 中,由于采用了新的 Composition API,this 的作用被一定程度上取代了。

    2024年02月05日
    浏览(80)
  • C#中的Dispatcher:Invoke与BeginInvoke的使用

    Dispatcher是.NET框架中的一个重要概念,用于处理异步消息传递。在C#中,Dispatcher提供了两种方法:Invoke和BeginInvoke,用于控制线程上消息的顺序和执行方式。 Dispatcher.Invoke方法用于同步执行消息。它确保在调用该方法时,当前线程上的消息队列中的消息会被依次处理。使用In

    2024年02月07日
    浏览(27)
  • Vue前端 更具router.js 中的meta的roles实现路由卫士,实现权限判断。

    参考了之篇文章 1、我在登陆时获取到登录用户的角色名roles,并存入sessionStorage中,具体是在login页面实现,还是在menu页面实现都可以。在menu页面实现,可以显得登陆快一些。 2、编写router.js,注意,一个用户可能有多个角色。 这里有个bug 我们的roles存在sessionStorage中,关闭

    2024年02月13日
    浏览(36)
  • Vue(3)-vue中的Ajax、Vuex、路由及UI组件库

    课程链接 4.1.1.方法一 ​ 在vue.config.js中添加如下配置: 说明: 优点:配置简单,请求资源时直接发给前端(8080)即可。 缺点:不能配置多个代理,不能灵活的控制请求是否走代理。 工作方式:若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会转发给服务

    2024年02月02日
    浏览(72)
  • 【JS】JavaScript中的this关键字

    目录 this是什么? this的指向 ①全局环境 ②构造函数 ③对象的方法 this的四类调用方式 ①作为对象方法调用 ②纯粹的函数调用 ③作为构造函数调用 ④使用apply、call、bind调用 举例说明 JavaScript  this  指的是它所属的对象。 它拥有不同的值,具体取决于它的使用位置:

    2024年02月14日
    浏览(31)
  • 已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错

    已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错 已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错 控制台仍然出现cors禁止报错,接口调不通 配置proxy代理解决跨域问题的原理是: 前端工程本地环境会启动一个 express 或 koa 的

    2024年02月01日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包