首页 > 其他 > 详细

Vuex笔记

时间:2018-10-26 22:46:15      阅读:186      评论:0      收藏:0      [点我收藏+]

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

  2. 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

最简单的Store

// 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:

store.commit(‘increment‘)

console.log(store.state.count) // -> 1

注意: 通过提交mutation的方式,而非直接改变store.state.count.

 

注册store, 调用Vue.use(Vuex)

const app = new Vue({
  el: ‘#app‘,
  // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
  store,
  components: { Counter },
  template: `
    <div class="app">
      <counter></counter>
    </div>
  `
})

之后我们就可以通过this.$store访问.

const Counter = {
  template: `<div>{{ count }}</div>`,
  computed: {
    count () {
      return this.$store.state.count
    }
  }
}

 

Getter

技术分享图片

(此时不理解mapGetters,和mapState)

Mutation

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:

 

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})

不能直接调用一个mutation handler.这个选项更像是事件注册: "当触发一个类型为increment的mutation时", 调用此函数." 要唤醒一个mutationhandler,你需要已相应的type调用storecommit方法;

store.commit(‘increment‘)

也可以向store.commit传入额外的参数,即mutation的载荷(payload)

技术分享图片

大多数情况下,载荷应该是一个对象,这样可以包含多个字段并且记录的mutation会更容易读

// ...
mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
store.commit(‘increment‘, {
  amount: 10
})

提交mutation的的另一种方式是直接使用包含type属性的对象;

store.commit({
  type: ‘increment‘,
  amount: 10
})

整个对象都作为载荷传给 mutation 函数. 因此 handler 保持不变:

mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}

 

Vuex笔记

原文:https://www.cnblogs.com/chenrun/p/9859009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!