Vuex核心属性总结

Vuex是Vue的一个插件。

一、概念:

Vuex是对Vue应用中多个组件的共享状态进行集中式的管理(读/写),Vue的应用是一个状态自管理的应用。

二、Vuex的安装:

NPM:

npm install vuex --save

Yarn:

yarn add vuex

三、学习:

每一个Vuex应用的核心就是store(仓库)。“store”基本上就是一个容器,包含着你的应用中大部分的状态(state)

Vuex的结构图:
在这里插入图片描述

Vuex包含五个核心概念:分别是 State、 Mutations、Actions、Getters、Modules。

1.对结构图的解释:

  首先结构图包含两个部分,一个是vue Component,是Vue里面的组件。另一个包含Actions、Mutations、State、Getters的流程结构。
(1)在组件vue Component中使用this.$store.dispatch('xxx')分发action或者使用辅助函数mapActions将组件的methods映射为store.dispatch调用。

例如:(这里是放一小段案例的代码,方便大家明白上述是什么意思)

 methods:{
      deleteCompleteTodos(){
        this.$store.dispatch('deleteCompleteTodos',this.index)//删除todo
      },
      ...mapActions['deleteCompleteTodos']
    }

(2)Action:不能直接更新状态,任务是请求mutation(通过调用commit()方法)。
  是否可以直接分发mutation呢?不能,因为mutation不能执行异步,而Action内部可以进行异步操作。
eg:

export default{
	deleteCompleteTodos({commit}){
    	commit(DELETE_COMPLETE_TODOS);
  	},
  //异步获取todos并更新状态
  	reqTodos({commit}){
    //模拟
	    setTimeout(()=>{
	      //读取数据
	      const todos = storageUtil.readTodos();
	      //提交一个mutation
	      commit(RECEIVE_TODOS,todos);
	
	},1000)
}

(3) Mutation:直接调用State里面的数据更新状态,包含多个由action触发去直接更新状态方法的对象。action中的cimmit()来触发,只能包含同步的代码,不能写异步代码。

//mutation-types.js文件
export const ADD_TODO = 'add_todo' //对应添加todo的更新操作
import {ADD_TODO} from './mutation-types'

export default{
//使用常量代替mutation的事件类型  
  [ADD_TODO] (state,{todo}){
    state.todos.unshift(todo); //添加至注数组开头位置,更新状态
  }}

(4) Getters:从state里面读取数据,包含所有基于state的getter计算属性的对象。读取方式:$store.getters.xxx

eg: 部分带码

    computed:{
      ...mapGetters(['totalCount','completeCount']),
      isAllCheck:{
        get(){
          return this.$store.getters.isAllCheck
        },
        set(value){//value boolean类型
          return this.$store.dispatch('selectAllTodos',value);
        }
      }
    }

首先在项目的src文件夹下创建一个store文件夹,创建一个index.js文件里面写上如下代码:

//Vuex通过store选项,提供了一种机制将状态从根组件"注入"到每一个子组件中
Vue.use(Vuex);
export default new Vuex.Store({
  state,
  mutations,
  actions,
  getters
})

(5)Modules:

  • 包含多个module。
  • 一个module是一个store的配置对象。
  • 与一个组件对象(包含有共享数据)对应。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值