小言_互联网的博客

10分钟了解Vuex的使用步骤和核心特性

410人阅读  评论(0)

知识点:

vuex概述
vuex的基本使用
vuex的核心特性

1、vuex概述

什么是vuex

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

vuex管理数据的优点

1、能够在vuex中集中管理共享的数据,便于开发和后期的维护

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

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

2、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、使用

1.在state中定义数据

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

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

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

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

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

4、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')
            }
    }
}

3、vuex中的核心特性

state

state提供唯一的公共数据源,所有共享的数据都要统一放到store中的state中存储
在组件中访问state的方式:

1、 .this. s t o r e . s t a t e . 全 局 数 据 名 称 如 : t h i s . store.state.全局数据名称 如:this. store.state.this.store.state.count
2、先按需导入mapState函数: import { mapState } from ‘vuex’
然后数据映射为计算属性: computed:{ …mapState([‘全局数据名称’])

mutation

Mutation用于修改变更$store中的数据
使用方式第一种:

1、打开store.js文件,在mutations中添加代码如下
mutations: { add(state,step){ //第一个形参永远都是state也就是$state对象 //第二个形参是调用add时传递的参数 state.count+=step; } }
2、然后在Addition.vue中给按钮添加事件代码如下:

<button @click="Add">+1</button>

methods:{
   
  Add(){
   
    //使用commit函数调用mutations中的对应函数,
    //第一个参数就是我们要调用的mutations中的函数名
    //第二个参数就是传递给add函数的参数
    this.$store.commit('add',10)
  }
}
import {
    mapState,mapMutations } from 'vuex'

export default {
   
  data() {
   
    return {
   }
  },
  methods:{
   
      //获得mapMutations映射的sub函数
      ...mapMutations(['sub']),
      //当点击按钮时触发Sub函数
      Sub(){
   
          //调用sub函数完成对数据的操作
          this.sub(10);
      }
  },
  computed:{
   
      ...mapState(['count'])
      
  }
}

使用mutations的第二种方式:

import {
    mapMutations } from 'vuex'

methods:{
   
  ...mapMutations(['add'])
}

action

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

操作步骤如下:
打开store.js文件,修改Action,如下:
actions: {
addAsync(context,step){
setTimeout(()=>{
context.commit(‘add’,step);
},2000)
}
}
然后在Addition.vue中给按钮添加事件代码如下
<button @click=“AddAsync”>…+1
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,如下:

export default new Vuex.Store({

getters:{
//添加了一个showNum的属性
showNum : state =>{
return ‘最新的count值为:’+state.count;
}
}
})

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

或者也可以在Addition.vue中,导入mapGetters,并将之映射为计算属性
import { mapGetters } from ‘vuex’
computed:{
…mapGetters([‘showNum’])
}


转载:https://blog.csdn.net/weixin_44865458/article/details/116333261
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场