Vuex(State, Mutations, Actions, Getters)

vuex

核心概念

  1. State
  2. Mutations
  3. Actions
  4. Getters

一、State

State提供唯一的公共数据源,所有共享的数据都存放到store的State中进行存储
src/store/index.js中代码如下:

export default new Vuex.Store({    
    state: {    
        list: []
    },
    mutations: {    
        initList (state, list) {      
          state.list = list    
        },
        removeItem (state, id) {      
            const i = state.list.findIndex(x => x.id === id)      
            if (i !== -1) {        
                state.list.splice(i, 1)      
            }    
        }
    },
    actions: {    
        getList (context) {      
            axios.get('/list.json').then(({ data }) => {                    
            context.commit('initList', data)      
            })    
        }  
    },
    getters: {    
        unDoneLength (state) {      
            return state.list.filter(x => x.done === false).length    
        }
    }
  1. 组件访问State中数据的第一种方式:
this.$store.state.全局数据名称
  1. 组件访问State中数据的第二种方式:
//步骤一
import { mapState } from 'vuex'
//步骤二
computed: {
    ...mapState (['list'])
}
//然后就可以当作data中的数据一样使用 
	

二、Mutations

Mutations用于变更Store中的数据

  1. 组件变更State中数据的第一种方式:
    //在methods中
    removeItemById (id) {
      this.$store.commit('removeItem', id)
    }
  1. 组件变更State中数据的第二种方式:
import { mapMutaytions } from 'vuex'
  methods: {
    ...mapMutaytions(['removeItemById'])
  }
//然后就可以当作methods中的方法一样使用

三、Actions

Actions用于处理异步任务
原理是:
在Actions中通过【context.commit(‘initList’, data) 】触发Mutations, 从而变更数据;
只有Mutations中定义的函数才有权力修改State中的数据。
也就是先触发Actions处理异步任务,接着Actions再触发Mutations变更数据。

  1. 触发Actions的方式一
    //在methods中
    handle (id) {
      this.$store.dispatch('getList', id)
    },
  1. 触发Actions的方式二
import { mapActions } from 'vuex'
  methods: {
    ...mapActions(['getList'])
  }

四、Getters

getters用于包装数据。
1.使用Getters的方式一

this.$store.getters.名称

2.使用Getters的方式二

import { mapGetters } from 'vuex'
  computed: {
    ...mapGetters(['unDoneLength'])
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值