关于vue.js:vuex-的那些事

vuex 是专门为vue.js 服务的状态治理库(本人的了解就是:为vue框架存储全局的数据,能够在各个部分组件内应用)

特点:

  1. 响应性: store 中状态扭转, 在组件中也能高效更新
  2. 扭转store状态惟一门路, 通过 mutation 中提交commit,dispatch 办法是调异步函数的

外围:

  1. state 繁多状态树——对象: 每个模块能够领有本人的状态树对象
//在store 中定义
const state = {
   count: 0,
   name: ""
}

mapState 辅助函数:把store中的多个状态映射到部分组件内的计算属性

import { mapState } from 'vuex'
computed: {
   //应用对象开展运算符将此状态混入到部分组件中
    ...mapState(['name']), //名称不变
    ...mapState({firstName: 'name'}]),  //起个别名  
}
  1. getter:状态计算属性对象。 若须要应用store中的多个状态进行计算,失去的值利用到多个组件中, 就能够应用getter, getters能够说成是store 的计算属性

在store中定义

const getters =  {
  // 以属性的办法定义
  doCount1: (state, getters)=> {
    return  "hello " + state.name
  }
 // 以返回带参数的函数办法定义,
  doCount2 :(state, getters)=>(id)=> {
    return  "hello " + state.name + "your id is number " + id
  }
}

拜访时应用也略有不同
属性拜访: this.$store.getters.doCount1
办法拜访: this.$store.getters.doCount2(id)

mapGetters 辅助函数, 把store中的getters 映射到部分组件内的计算属性

import { mapGetters } from 'vuex'
computed: {
   //应用对象开展运算符将此属性混入到部分组件中
    ...mapGetters(['doCount1']),
}
  1. mutations:事件注册对象—— 更改store状态, 不能间接调用,需通过commit 调用
const mutations = {
  UPDATE_COUNT(state, num) {
    state.count = state.count + num
  },
}

mapMutations: 辅助函数, 把 store 中的mutations 映射到部分组件内的计算属性

import { mapMutations } from 'vuex'
methods: {
   //应用对象开展运算符将此办法混入到部分组件中
    ...mapMutations(['UPDATE_COUNT']),
}

**
**留神,因为mutations 必须是同步函数, 为了解决异步函数, 引入了action, 故 在action中能够蕴含任意类型的函数
应用commit,能够调用mutations 中的函数, 应用dispatch 散发能够调用异步函数
见action**
**

  1. actions
const actions =  {
    increment (context, num) {
      context.commit('UPDATE_COUNT', num)
    }
  }

办法承受一个context 对象, 蕴含本模块内的state, getters, commit, dispatch(异步散发) 等属性, 但它并不是store实例哦, 能够利用解构参数传入参数 {commit, dispatch}

const actions =  {
    increment ({commit}, num) {
      context.commit('UPDATE_COUNT', num)
    }
  }

mapActions: 辅助函数, 把store中的action 映射到部分组件的method 办法内

import { mapActions } from 'vuex'
methods: {
   //应用对象开展运算符将 `this.increment()` 映射为 `this.$store.dispatch('increment')`
    ...mapActiongs(['increment']),
}

一个残缺的store

export default new Vuex.Store({
  state:{
      //寄存状态
  },
    getters:{
        //state 的计算属性
  },
  mutations:{
       // 更改state中状态的逻辑 , 同步操作
  },
  actions: {
        // 提交mutations , 异步操作
  },
  modules: {
       // 将store 分成一个个子模块, 每个子模块中领有本人的state, mutations, actions, modules, 模块内写 namespaced: true;是带有命名空间的模块, 使模块更具备封装性和复用性,
  }

 
});

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理