深入理解Vuex

什么是Vuex

  Vuex是实现组件全局状态管理的一种机制,可以方便的实现组件之间数据的共享。使用Vuex可以集中的管理共享数据,高效实现数据共享,另外Vuex的数据是响应式的,可以实时保持数据与页面的同步。

安装方式

  在使用vue-cli3或4建立项目的时候,有选项是否要安装Vuex,安装即可。项目完成之后,可以看到有一个store的文件夹,文件的内容:

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {}
})

Vuex的使用

  1.state:存放共享数据

state: {
    // 文本框的内容
    inputValue: 'aaa'
},

  访问共享数据的两种方式:

	1)this.$store.state.inputValue 
	
	2)import { mapState } from 'vuex'
		
	   computed: {
	        // 展开运算符,将全局变量映射为自己界面的变量
			...mapState(['inputValue']) 
       }

  2.mutation:修改vuex中的数据

    // 更新文本框的值
    setInputValue (state, value) {
      state.inputValue = value
    },

  界面上使用的两种方式:

	1)this.$store.commit('setInputValue', value)
	
	2)import { mapMutations } from 'vuex'
		
	   methods:{
	       ...mapMutations(['setInputValue'])
       }

  3.action:处理异步任务,异步变更数据使用action,但是在action中还是要触发mutation的方式间接变更数据

state: {
    // 所有的任务列表
    list: []
},
mutations: {
    initList (state, list) {
      state.list = list
    }
},
actions: {
    getList (context) {
      axios.get('/list.json').then(({ data }) => {
        console.log(data)
        context.commit('initList', data)
      })
    }
},

  界面上使用的两种方式:

	1)this.$store.dispatch('getList')
	
	2)import { mapActions } from 'vuex'
		
	   methods:{
	       ...mapActions (['getList'])
       }

  4.getter:对store中的数据进行加工处理形成新的数据,但是并不会修改store中的数据

getters: {
    // 统计未完成的任务数量
    unDoneLength (state) {
      return state.list.filter(x => x.done === false).length
    }
}

  界面上使用的两种方式:

	1)this.$store.getters.unDoneLength 
	
	2)import { mapGetters } from 'vuex'
		
	   computed: {
	        ...mapGetters(['unDoneLength'])
       }

总结

  Vuex作为vue的核心插件,大家可以适当的用起来哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章