趁着对象泡脚的功夫,我把vueX吃透了
Posted 几何心凉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了趁着对象泡脚的功夫,我把vueX吃透了相关的知识,希望对你有一定的参考价值。
文章目录
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'//引入store
new Vue(
el: '#app',
router,
store,//使用store
template: '<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'])
🌟写在最后
下方是小编开设的公众号,每天为大家推送前端硬核知识!期待您的加入哦!
✨ 原 创 不 易 , 大 佬 们 给 个 支 持 ! ! ! \\textcolorblue原创不易,大佬们给个支持!!! 原创不易,大佬们给个支持!!!
👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \\textcolorgreen点赞,你的认可是我创作的动力! 点赞,你的认可是我创作的动力!
⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \\textcolorgreen收藏,你的青睐是我努力的方向! 收藏,你的青睐是我努力的方向!
✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \\textcolorgreen评论,你的意见是我进步的财富! 评论,你的意见是我进步的财富!
以上是关于趁着对象泡脚的功夫,我把vueX吃透了的主要内容,如果未能解决你的问题,请参考以下文章
我把 Vue3 项目中的 Vuex 去除了,改用 Pinia