0


趁着对象泡脚的功夫,我把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 =newVuex.Store();exportdefault store;

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

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

4.使用

在state中定义数据

Vue.use(Vuex)const store =newVuex.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'exportdefault{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'exportdefault{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

exportdefaultnewVuex.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}{评论,你的意见是我进步的财富!}
   
  
 评论,你的意见是我进步的财富!

本文转载自: https://blog.csdn.net/JHXL_/article/details/122414778
版权归原作者 几何心凉 所有, 如有侵权,请联系我们删除。

“趁着对象泡脚的功夫,我把vueX吃透了”的评论:

还没有评论