美文网首页
再读Vuex

再读Vuex

作者: 芸芸人海之中独独遇见你 | 来源:发表于2017-12-15 15:11 被阅读0次

vuex是vue的状态管理工具


单向数据流

在components中通过dispatch来触发actions,actions通过commit来触发mutations,mutations最终触发state的变更,state的变更引起组件中computed计算属性的响应,从而反应到组件中。

注意点归纳

  1. 为了避免在需要使用state的组件中频繁地导入store管理模块,vuex提供了注入的机制,从根组件将stroe注入所有组件,且子组件能通过 this.$store 访问到。
const app = new Vue({
  el: '#app',
  // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
  store,
  components: { Counter }
})
  1. mapState辅助函数,当一个子组件需要依赖多个state,通过在计算属性中使用mapState辅助函数,将所有需要的state 混入 计算属性中,当任一state改变,将触发计算属性重新计算。
computed: mapState(['toast'])
//当计算属性还需要计算其他的数据时,使用ES2015的...解构方法,将所有state混入计算属性。...对象展开运算符将其解构成对象属性的形式,而不是对象的形式。
computed:{
          otherdata(){},
          ...mapState(['xx','xxx'])
}
  1. Getter相当于State的filter,可以将state数据进行一些操作之后再返回给组件,当需要这个过滤器时,mapState辅助函数还可以替换为mapGetter辅助函数,再混入computed,监听过滤后的state。
import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}
  1. Vuex中更改store的唯一方法是提交mutation(突变),mutations中定义突变函数名,通过commit('突变函数名')来触发mutation,多数情况下,突变函数应接受两个参数,一个是突变的state,一个是payload(载荷,一个有关突变数据的对象)。
mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
store.commit('increment', {
  amount: 10
})
/***********************************************/
/***在组件中,可以将需要的突变函数混入method方法***/
import { mapMutations } from 'vuex'
export default {
  // ...
  methods: {
    ...mapMutations([
      'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`

      // `mapMutations` 也支持载荷:
      'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.commit('incrementBy', amount)`
    ]),
    ...mapMutations({
      add: 'increment' // 将 `this.add()` 映射为 `this.$store.commit('increment')`
    })
  }
}
  1. 在mutation之中只能进行同步的操作,所有的异步操作需要放到action中,再然后,通过dispatch来触发action,action是通过commit mutation来实现变动的。Action也可以在methods中通过...mapAction来分发action。例如:
 getArticles: ({commit}) => {
    const start = beginLoading(commit)
    return Vue.http.get('/api/getArticles')
      .then(response => response.json())
      .then(articles => {
        stopLoading(commit, start)
         //触发mutation
         commit('SET_ARTICLES', articles)
      })
  }
  1. 上方({commit})的操作的解释,commit为从 函数实参对象中提取的数据,传入函数的还是一个包含此commit函数对象的对象。
    image.png

长路漫漫,
勿忘初心 。

相关文章

  • 再读Vuex

    vuex是vue的状态管理工具 在components中通过dispatch来触发actions,actions通...

  • VUEX基本介绍,包含实战示例及代码(基于Vue2.X)

    VUEX 1 VUEX基本介绍 1.1 官方API 1.2 什么是vuex 1.3 Vuex使用场景 1、Vuex...

  • 【文档笔记】-Vuex

    什么是vuex? vuex文档: https://vuex.vuejs.org/zh/[https://vuex....

  • vuex配置

    vuex配置 目录 vuex的五个核心 配置vuex vuex持久化 一、vuex五个核心概念 State 定义状...

  • Vuex

    安装Vuex cnpm install vuex --save-dev Vuex是什么? 这是[Vuex的官网](...

  • Vuex

    1.Vuex概述 2.Vuex基本使用 3.使用Vuex完成todo案例 1.Vuex概述 Vuex是实现组件全局...

  • vuex

    Vuex介绍: Vuex官网:http://vuex.vuejs.org/ Vuex是实现数据状态管理的技...

  • vuex+axios 的开发流程记录

    相关文档 vuex: https://vuex.vuejs.org/zh/ 是否有必要使用vuex vuex是vu...

  • 2019-06-07

    import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)...

  • 配置 vuex 和 vuex 本地持久化

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

网友评论

      本文标题:再读Vuex

      本文链接:https://www.haomeiwen.com/subject/xecdwxtx.html