vue15

本文详细介绍了Vuex的状态管理库,包括其核心概念、何时使用Vuex、如何搭建和使用Vuex环境、基本操作如actions、mutations和getters的使用,以及如何通过map方法简化操作。此外,还讲解了Vuex的模块化和命名空间的实现,以提升代码的可维护性和数据管理的清晰性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

vuex

1.概念

2.何时使用?

3.搭建vuex环境

4.基本使用

5.getters的使用

6.四个map方法的使用

7.模块化+命名空间


vuex

1.概念

在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读写),也是一种组件间通信的方式,且适用于任意组件间通信。

图示

 2.何时使用?

多个组件需要共亨数据时

3.搭建vuex环境

1.创建文件:scr/store/index.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用vue插件
Vue.use(Vuex)

//准备actions—用于响应组件中的动作
const actions = {}
//准备mutations—用于操作数据(state)
const mutations = {}
//准备state—用于存储数据
const state = {}

//创建并暴露store
export default new Vuex.Store({
    actions,
    mutations,
    state,    
})

 2.在main.js中创建vm传入store配置项

//引入vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//引入插件
import VueResource from 'vue-resource'
//引入store
import store from './store'
//关闭vue生产提示
Vue.config.productionTip = false
//使用插件
Vue.use(VueResource)

//创建vm
new Vue({
   el:'#app',
   render:h=>h(App),
   store,
   beforeCreate() {
    Vue.prototype.$bus=this//安装全局事件总线
   },
})

4.基本使用

(1)初始化数据、配置action、配置mutation、操作文件store.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用vue插件
Vue.use(Vuex)

//准备actions—用于响应组件中的动作
const actions = {
    /*jia(context, value) {
        context.commit('JIA', value)
    },
    jian(context, value) {
        context.commit('JIAN', value)
    },*/
    jiaOdd(context, value) {
        if(context.state.sum%2){
            context.commit('JIA', value)
        }        
    },
    jianWait(context, value) {
        setTimeout(()=>{
            context.commit('JIAN', value)
        },500)        
    },
}
//准备mutations—用于操作数据(state)
const mutations = {
    JIA(state, value) {
        state.sum += value
    },
    JIAN(state, value) {
        state.sum -= value
    },
}
//准备state—用于存储数据
const state = {
    sum: 0
}

//创建并暴露store
export default new Vuex.Store({
    actions,
    mutations,
    state,
})

(2).组件中读取vuex中的数据:$store.state.sum

(3)组件中修改vuex中的数据:$store.dispatch('action中的方法名',数据)或$store.commit('mutation中的方法',数据)

备注:若没有网络请求或其他业务,组件可以越过action,即不写dispatch,直接编写commit

 5.getters的使用

  1. 概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。
  2. 在store.js中追加getters配置
    const getters = {
    bigSum(state){
    return state.sum *10
    }
    //创建并暴露store
    export default new vuex.Store({
    getters)}

  3. 组件中读取数据: $store.getters.bigsum

6.四个map方法的使用

1.mapState方法:用于帮助我们映射state中的数据为计算属性

computed: {
//借助mapState生成计算属性:sum、 school、subject(对象写法)
...mapState({sum : 'sum' ,school : 'school ' ,subject: ' subject' }),
//借助mapState生成计算属性: sum、school、subject(数组写法)
...mapState( [ 'sum ' , 'school' , 'subject']),
},

2.mapGetters方法:用于帮助我们映射getters 中的数据为计算属性

computed: {
//借助mapGetters生成计算属性: bigSum(对象写法)
...mapGetters({bigSum: 'bigSum '}),
//借助mapGetters生成计算属性: bigSum(数组写法)
...mapGetters([ 'bigSum' ])


3.mapActions方法:用于帮助我们生成与actions对话的方法,即:包含 $store.dispatch(xxx)的函数

methods:{
//靠mapActions生成: increment0dd、incrementWait(对象形式)
...mapActions({incrementOdd: 'jia0dd ' ,incrementwait : 'jialwait ' })
//靠mapActions生成: incrementOdd、 incrementWait(数组形式)
...mapActions( [ 'jiaOdd ' ,'jiawait '])


 4.mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含($store.commit(xx)的函数

methods:{
//靠mapActions生成: increment、decrement(对象形式)
...mapMutations({increment : 'JIA' ,decrement : 'JIAN'}),
//靠mapMutations生成:JIA、JIAN(对象形式)
...mapMutations([ 'JIA' , ' JIAN' ]),

备注: mapActions与mapMutations使用时,若需要传递参数需要∶在模板中绑定事件时传递好参数,否则参数是事件对象。
 

7.模块化+命名空间

1.目的:让代码更好维护,让多种数据分类更加明确。

2.修改store.js

const countAbout = {
namespaced:true,
//开启命名空间
state:{x:1},
mutations: { ... },
actions: { ... },
getters: {
bigSum(state){
return state.sum* 10}
   }
}
const personAbout = {
namespaced:true,
//开启命名空间
state:{ ... },
mutations: { ... },
actions: {... }
const store = new Vuex.Store({
modules:{
countAbout,personAbout
  }
})

3.开启命名空间后,组件中读取state数据:

//方式一:自己直接读取
this.$store.state.personAbout. list
//方式二:借助mapState读取;
...mapState( 'countAbout' ,[ ' sum ' ,'school ' , 'subject']),

4.开启命名空间后,组件中读取getters数据:

//方式一:自己直接读取
this.$store.getters [ 'personAbout/firstPersonName ']
//方式二:借助mapGetters读取:
. ..mapGetters ( 'countAbout'[ 'bigSum'])

5.开启命名空间后,组件中调用dispatch

//方式一:自己直接dispatch
this.$store.dispatch( ' personAbout/addPersonWang ' ,person)
//方式二:借助mapActions:
...mapActions( 'countAbout ' ,{incrementOdd : 'jiaOdd ' ,incrementwait: 'jiawait '})


6.开启命名空间后,组件中调用commit

//方式一:自己直接commit
this.$store.commit( " personAbout/ADD_PERSON ' ,person)
//方式二:借助mapMutations:
...mapMutations( ' countAbout ' ,{increment: ' JIA' ,decrement : 'JIAN'}),


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值