vuex中state和mutations的使用

vuex类似与全局变量(公共数据),是vue的一个插件vuex,提供组件之间共享数据的方案
如何在vue项目中使用

  1. 安装
npm install vuex --save
// 或者
yarn add vuex
  1. 单独准备文件夹store/index.js,或者直接store.js,然后如下
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
    
    
    // 各种配置项
    // state 相当于data,用来保存vue项目中的公共数据,在整个vue项目中都可以访问到
    state: {
    
    
        num: 10,
        count: 'hh'
    },
    mutations: {
    
    
        // 定义了一个mutation,他本质就是一个函数
        mAdd1 (state) {
    
    
            // 这个mutation 的作用就是让state中的num加1
            state.num++
        },
        mSub (state) {
    
    
            state.num--
        },
        mAddN (state, m) {
    
    
           state.num = state.num + m
        },
        mSubN (state, m) {
    
    
            state.num = state.num - m
        }
    }
})
export default store
  1. 最后导出 export default store(看上边代码)
  2. 在main.js中,引入,并挂载到vue实例上
import store from './store/index'
new Vue({
    
    
  store,
  render: h => h(App),
}).$mount('#app')

接下来,使用是如何使用vuex中的数据项

使用state中数据项

  1. 第一种方法(常用,推荐)
    在方法中通过this.$store.state.num,num是state中的数据项,在视图中{ {$store.state.num}}
  2. 第二种方法(映射)
    按需引入import {mapState} from 'vuex',
    在计算属性中computed:{...mapState(['全局数据名称'])}

mutation的使用,修改state中的数据项
官网上:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation

  1. 第一种方式(常用,推荐)
  mutations: {
    
    
        // 定义了一个mutation,他本质就是一个函数
        mAdd1 (state) {
    
    
            // 这个mutation 的作用就是让state中的num加1
            state.num++
        },
        mSub (state) {
    
    
            state.num--
        },
        mAddN (state, m) {
    
    
           state.num = state.num + m
        },
        mSubN (state, m) {
    
    
            state.num = state.num - m
        }
    }
// ------------------------------------------------------------------------------------
// 调用,修改state中的数据项
this.$store.commit('mAdd1')
this.$store.commit('函数名', [参数])

注意:

  • 函数中第一个形参,代表当前vuex中 的state,
  • 直接在该函数(例如上边的mAdd1)中修改state
  • 调用时,第一个参数不用传,只能传一个参数,可以是对象或者数组this.$store.commit('mAddN' , 10)

2.第二种方式(映射)
按需引入import {mapMutations} from 'vuex',
在methods中methods:{...mapMutations(['函数名'])}

methods:{
    
    ...mapMutations(['mAdd1','mAddN'])}
	然后在其他方法中,可以直接调用
	this.函数名()
this.mAdd1()
this.mAddN()

猜你喜欢

转载自blog.csdn.net/m0_49159526/article/details/107947218
今日推荐