Vuex 状态对象同步到 VUE 组件内
   1 分钟阅读

把 Vuex 内的一个状态对象的属性,简写;

一共两种方式

  • Vuex 的基础搭建
  • mapState 辅助

DEMO 如下;

一、Vuex 的基础搭建

1.src 下面创建 store.js,文件内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)

const options={
    //状态对象
    state: {
        count: 111
    },
    //触发状态
    mutations: {
        increment (state) {
            state.count++
        },
        jian(state){
            state.count
        }
    }
}
const store =new Vuex.Store(options)
export default store;

2.mainjs 中引用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import Vue from 'vue';
import App from './App';
import router from './router';
import store from './store';

import { create } from 'domain';
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
    el: "#app",
    router,
    store,
    render:h=>h(App)
})

3. 在 Vue 文件中使用

<p>Vuex的数据 {{$store.state.count}}</p>

下面开始正式做数据同步;

一、computed 动态计算

1
2
3
4
5
computed:{
    detailCount(){
        return this.$store.state.count
    }
},

在 vue 文件中直接使用组件内的数据即可;

<p>内部的数据 {{detailCount}}</p>

二、mapState 辅助;

在单独构建的版本中辅助函数为 Vuex.mapState 在组件内,先 import;

1
2
3
4
import { mapState } from vuex
computed:mapState({
    count : state => state.count
})

这样即可;还可以做下面这种简化的写法

1
computed:mapState(['count'])

下面这种方法,还是非常常用的;

如果想连 mutatios 里面的方法也一起简写;

可以下面这样;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { mapState ,mapMutations } from 'vuex'

export default {
  name:"UserDetail",
  data(){
      return{
          logo:"AXIHE"

      }
  },
  computed: mapState(['count']),
  methods:mapMutations([
      'increment',
      'jian'
  ]),
  watch:{
      '$route'(to,form){
          console.log(to)
          console.log(form)
      }
  }
}

这样的话,就可以直接使用了;