趁着对象泡脚的功夫,我把vueX吃透了

文章目录

    • vueX
      • 🌟Vuex的概述
        • 什么是vuex
        • Vuex管理数据的优点
      • 🌟Vuex的基本使用步骤
        • 1.安装 npm i vuex --save
        • 2.在src文件目录下新建store>index.js文件
        • 3.口文件里面引入store,然后再全局注入
        • 4.使用
      • 🌟Vuex中的核心特性
        • State
          • 在组件中访问State的方式:
        • Mutation
          • 使用方式第一种
          • 使用mutations的第二种方式:
        • Action
          • 操作步骤第一种
          • 操作步骤第二种
        • Getter
          • 使用
      • 🌟写在最后

vueX

🌟Vuex的概述

什么是vuex

Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享

Vuex管理数据的优点

A.能够在vuex中集中管理共享的数据,便于开发和后期进行维护

B.能够高效的实现组件之间的数据共享,提高开发效率

C.存储在vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新

🌟Vuex的基本使用步骤

1.安装 npm i vuex --save

2.在src文件目录下新建store>index.js文件

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store();export default store;

3.口文件里面引入store,然后再全局注入

import store from './store'//引入storenew Vue({el: '#app',router,store,//使用storetemplate: '<App/>',components: { App }
})

4.使用

在state中定义数据

Vue.use(Vuex)
const store = new Vuex.Store({state:{count:1}
})

Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,Getters 可以用于监听、state中的值的变化,返回计算后的结果

 getters:{getCount:state=>{return state.count+1}

给action注册事件处理函数,当这个函数被触发时候,将状态提交到mutations中处理。actions里面自定义的函数接收一个context参数和要变化的形参

actions:{addFun(context,n){context.commit('add',n)}removeFun(context){context.commit("remove")}}

mutations是一个对象里。面的方法 都是同步事务,是更改state初始状态的唯一合法方法,具体的用法就是给里面的方法传入参数state或额外的参数

  mutations:{add(state,n){state.count = state.count+n},remove(){state.count=state.count-1}},

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

commit:同步操作,写法:this.$store.commit(‘mutations方法名’,值)

export defult{data(){return{mag:'aaa'}},methods:{addCount(){this.$store.commit('add')},reoveCount:function(){this.$store.commit('remove')},addFun(){let n =2;this.$store.dispatch('addFun',n)},removeFun(){this.$store.dispatch('removeFun')}}
}

🌟Vuex中的核心特性

State

State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储

在组件中访问State的方式:
1).this.$store.state.全局数据名称  如:this.$store.state.count
2).先按需导入mapState函数: import { mapState } from 'vuex'
然后数据映射为计算属性: computed:{ ...mapState(['全局数据名称']) }

Mutation

Mutation用于修改变更$store中的数据

使用方式第一种

打开store.js文件,在mutations中添加代码如下

mutations: {add(state,step){//第一个形参永远都是state也就是$state对象//第二个形参是调用add时传递的参数state.count+=step;}}

然后在Addition.vue中给按钮添加事件代码如下:

<button @click="Add">+1</button>methods:{Add(){//使用commit函数调用mutations中的对应函数,//第一个参数就是我们要调用的mutations中的函数名//第二个参数就是传递给add函数的参数this.$store.commit('add',10)}
}
使用mutations的第二种方式:
import { mapMutations } from 'vuex'methods:{...mapMutations(['add'])
}
import { mapState,mapMutations } from 'vuex'export default {data() {return {}},methods:{//获得mapMutations映射的sub函数...mapMutations(['sub']),//当点击按钮时触发Sub函数Sub(){//调用sub函数完成对数据的操作this.sub(10);}},computed:{...mapState(['count'])}
}

Action

在mutations中不能编写异步的代码,会导致vue调试器的显示出错。
在vuex中我们可以使用Action来执行异步操作。

操作步骤第一种

打开store.js文件,修改Action,如下:

actions: {addAsync(context,step){setTimeout(()=>{context.commit('add',step);},2000)}
}

然后在Addition.vue中给按钮添加事件代码如下

<button @click="AddAsync">...+1</button>methods:{AddAsync(){this.$store.dispatch('addAsync',5)}
}
操作步骤第二种
import { mapActions } from 'vuex'methods:{...mapMutations(['subAsync'])
}
import { mapState,mapMutations,mapActions } from 'vuex'export default {data() {return {}},methods:{//获得mapMutations映射的sub函数...mapMutations(['sub']),//当点击按钮时触发Sub函数Sub(){//调用sub函数完成对数据的操作this.sub(10);},//获得mapActions映射的addAsync函数...mapActions(['subAsync']),asyncSub(){this.subAsync(5);}},computed:{...mapState(['count'])}
}

Getter

Getter用于对Store中的数据进行加工处理形成新的数据
它只会包装Store中保存的数据,并不会修改Store中保存的数据,当Store中的数据发生变化时,Getter生成的内容也会随之变化

使用

打开store.js文件,添加getters,然后打开Addition.vue中,添加插值表达式使用getters

export default new Vuex.Store({.......getters:{//添加了一个showNum的属性showNum : state =>{return '最新的count值为:'+state.count;}}
})

或者也可以在Addition.vue中,导入mapGetters,并将之映射为计算属性

import { mapGetters } from 'vuex'
computed:{...mapGetters(['showNum'])
}

🌟写在最后

下方是小编开设的公众号,每天为大家推送前端硬核知识!期待您的加入哦!
在这里插入图片描述

原创不易,大佬们给个支持!!!\textcolor{blue}{原创不易,大佬们给个支持!!!}

👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}

✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解】FBI序列

题目描述 两伙外星人策划在未来的XXXX年侵略地球&#xff0c;侵略前自然要交换信息咯&#xff0c;现在&#xff0c;作为全球保卫队队长&#xff0c;你截获了外星人用来交换信息的一段仅由“F”&#xff0c;“B”&#xff0c;“I”&#xff0c;“O”组成的序列。为了保卫地球和平…

vue基础(上篇)

✨有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇\textcolor{blue}{ 有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于 vue的基础篇}有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇 ✨ 今天他来了…

depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题

DEPENDS工具和DUMPBIN工具使用阅读目录(Content) 1.Depends2.DUMPBIN2.1 开启CMD2.2 移动目录到C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin2.3 运行命令:VCVARS32.BAT2.4 下面就可以调用dumpbin.exe命令了在系统部署运行时我们经常发现某个程序在开发机器中可以…

友联

欢迎来到小站友链区&#xff0c;欢迎━(&#xff40;∀)ノ亻!。 ljc20020730学长巨佬_WA自动机珂朵莉最可爱了BLUESKY007雷姆最可爱啦扬子曰他的代码是神奇的lukelin机房最强如果你想要成为chhokmah小站的朋友的话&#xff0c;请你先把小站加入为友链站哟(&#xff3e;&#xf…

vue基础(中篇)

✨有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇\textcolor{blue}{ 有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于 vue的基础篇}有粉丝在私信中联系博主&#xff0c;希望博主能够系统的出一篇关于vue的基础篇 ✨ 今天他来了…

DR图像的畸变校正

DR图像容易产生S形、枕形和局部失真的情况&#xff0c;这给医生对图像的判断带来干扰。而且在医学图像的三维重建中&#xff0c;未经校正的图像进行重建&#xff0c;还会带来一定的重影等干扰。因此&#xff0c;畸变校正是DR图像进行后续处理&#xff0c;不得不对待的一个问题。…

【CF global1 D / CF1110D】 Jongmah

题意 你有n个数字&#xff0c;范围[1, m]&#xff0c;你可以选择其中的三个数字构成一个三元组&#xff0c;但是这三个数字必须是连续的或者相同的&#xff0c;每个数字只能用一次&#xff0c;问这n个数字最多构成多少个三元组? 分析 这里想谈一下DP的一个套路&#xff0c;捆绑…

vue基础(下篇)

介绍 对vue组件的介绍网上有很多大家可以自行查询 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素&#xff0c;封装可重用的代 组件注册 全局注册 Vue.component(‘组件名称’, { }) 第1个参数是标签名称&#xff0c;第2个参数是一个选项对象 全局组…

MS17-010漏洞复现

攻击机&#xff1a;192.168.148.132 kali linux2018.2 x64 靶机&#xff1a;192.168.1.129 win7 x64 首先用msfconsole的smb模块扫描&#xff0c;看看是否有漏洞 use auxiliary/scanner/smb/smb_ms17_010 set rhosts 192.168.1.129 &#xff08;目标主机&#xff09; Ho…

watch 和 computed

<template><div class"hello"><h1>{{ msg }}</h1><h2>Essential Links</h2><!-- watch/computed比较 --><div><input v-model"firstName" type"text"><input v-model"lastName&q…

[BZOJ]3173: [Tjoi2013]最长上升子序列

题解: 考虑按照元素升序加入 所以对位置在其后的元素LIS无影响 然后从前面位置的最大值转移过来就行 ,,,,平衡树无脑模拟 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <s…

转:HTTP协议简介与在python中的使用详解

1. 使用谷歌/火狐浏览器分析 在Web应用中&#xff0c;服务器把网页传给浏览器&#xff0c;实际上就是把网页的HTML代码发送给浏览器&#xff0c;让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP&#xff0c;所以&#xff1a; HTML是一种用来定义网页的文本&#xff0c…

深受企业青睐的华为云

作为中国经济活力与韧性的重要保障&#xff0c;无数中小企业也在为夺得各自领域的冠军你追我赶。而席卷全球的数字化转型浪潮&#xff0c;则将这场冠军争夺赛推向了关键节点。企业数字化的第一步就是业务云端化&#xff0c;对企业来说云计算是不可或缺的数字底座。上云&#xf…

一个程序员的水平能差到什么程度?

老板觉得公司里都是男的&#xff0c;缺少一点阴柔之气&#xff0c;想平衡一下&#xff0c;正巧当时互金公司倒了一大批&#xff0c;大批简历投到公司&#xff0c;老板以为自己也是技术出身&#xff0c;就招了一个三年工作经验的女程序员&#xff0c;互金出来的&#xff0c;要价…

vue路由详解版一目了然

概念 路由的本质就是一种对应关系&#xff0c;比如说我们在url地址中输入我们要访问的url地址之后&#xff0c;浏览器要去请求这个url地址对应的资源。 那么url地址和真实的资源之间就有一种对应的关系&#xff0c;就是路由。 路由分为前端路由和后端路由 1).后端路由是由服务…

go语言环境搭建

1、windows环境搭建   1、安装go   2、安装goland开发工具包 2、test.go /* 可执行文件&#xff0c;包名必须是main */ package main /* fmt 字符串格式化的包 */ import "fmt"/*main入口函数*/ func main() { fmt.Printf("Hello, world" )} View Code…

进阶函数

一、函数对象 函数是第一类对象&#xff1a;函数名指向的值可以被当做参数传递 1.函数名可以被传递 def func():print(func)f func # 函数名可以当做变量名 print(f) # f指向的也是函数func指向函数体代码的内存地址 2.函数名可以被当做参数传递给其他参数 def func():print…

vue脚手架基础API全面讲解【内附多个案例】

vscode-插件补充 vue文件代码高亮插件-vscode中安装 代码提示插件-vscode中安装 知识点自测 想学会今天的内容, 先测测这几个会不会 表达式, 变量是什么 new的作用和含义 实例化对象 什么是对象上的, 属性和方法 对象的赋值和取值 this的指向 npm/yarn是什么, package.json干…

mysql 和 sqlserver sql差异比较

mysql:select * from table_name limit 100,200;--取出从100到200的数据 获取时间&#xff1a;mysql:now() mysql tinyint&#xff08;0,1&#xff09; → bit float &#xff08;decimal(19,4)&#xff09;→ moneytext → ntextvarchar →nvarchar 转载于:https://www.cnblo…

Vue 过滤器、计算属性、侦听器 图解版 一目了然

文章目录本篇学习目标1. vue基础1.0_vue基础 v-for更新监测1.1_vue基础_v-for就地更新1.2_vue基础_虚拟dom1.3_vue基础_diff算法情况1: 根元素变了, 删除重建情况2: 根元素没变, 属性改变, 元素复用, 更新属性1.4_vue基础_diff算法-key情况3: 根元素没变, 子元素没变, 元素内容…