趁着对象泡脚的功夫,我把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

我把vue3项目中的vuex去除了,改用 pinia

谁知道c++的好处?

23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

wpf有啥好处

吃透一款RPC框架源码 ,简历超过80%的同行