Vue-vuex仓库的使用

vuex可以使同级的组件实现共享数据共享,是一个数据管理仓库 具体可以参考vuex文档
使用vuex首先需要引入:

 //安装包
cnpm i vuex 
   //引入vuex
import  Vuex from "vuex"
  //使用
Vue.use(Vuex)
  //创建实例
const store = new Vuex.Store({
  state: {     //数据 类似于data 
    age: 10,
    firstName: 'zhang',
    lastName: 'san'
  },
  getters: {   //和vue中的计算属性差不多 
    fullname({ firstName, lastName }) {
      return firstName + lastName
    }
  },
  mutations: {   //这里是方法
    addA(state) {  state是默认的 直接写即可 
      state.age++
    }
  },
    anctions: {   //用来解决异步请求的问题
    addA(state) {  //state是默认的 直接写即可 
setTimeout(()=>{
      state.age++
    },1000)
  }
})
   //注册到vue实例中
new Vue({
  store,
  render: h => h(App),
}).$mount('#app')

vuex创建好了之后 就可以直接使用了。
如果是state和getters的话 就可以直接使用

<template>
    <div>
{{$store.state.age}}
{{$store.getters.fullname}}
    </div>
</template>

如果是方法的话 需要用commit接收一下

<button @click ='add'> add</button

<button @click ='add1'> add</button
add(){
    this.$store.commit('addA')
}, 
add1(){
    this.$store.dispatch('addA')
}

但是如果遇到如

{{$store.getters.fullname}}
{{$store.state.firstName+$store.state.lastName}}

这样的代码 就比较长 代码不简洁 对此 vuex也提供了相对应的辅助函数
针对state和getters 可以写成一下代码

<script>
//先引入 就可以直接在组件中使用
import {mapState} from 'vuex'
import {mapGetters} from 'vuex'
export default {
    computed: {
        ...mapState(['age','firstName']),
        ...mapGetters(['fullname'])
    },
};
</script>

针对mutatios 可以写成一下代码

<script>
import {mapMutations} from 'vuex'
export default {
ods: {
          ...mapMutations(['addA'])
    }
};
</script>
posted @ 2021-12-27 15:58  秋墨江雪  阅读(199)  评论(0编辑  收藏  举报