vue.js 之 vuex 中的 state 使用

2019-11-08  本文已影响0人  男卅_卅

state

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
count: 0
  }
})
//创建一个Counter组件
const Counter = {
    data() { return {} },
    template: `<div>{{ count }}</div>`,
    computed: {
        count () {
          return store.state.count
      }    
    }
  }

需要注意的是如果你把 store.state.count 放在data中, store.state.count 的变化是不会主动触发直接访问带store对象的,所以这样写五一是会报错的。

这种模式依赖于全局的管理员 store ,如果模块多了,意味着每个模块或者页面只要用到了这个state里面的数据,都得把store一如进来,这样的操作确实有点难受。当然,官方肯定是不允许有这样难受的操作出现的:

Vuex 通过store选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用Vue.use(Vuex));

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

使用 Vuex 并不意味着你需要将所有的状态放入 Vuex。虽然将所有的状态放到 Vuex 会使状态变化更显式和易调试,但也会使代码变得冗长和不直观。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。你应该根据你的应用开发需要进行权衡和确定。

上一篇 下一篇

猜你喜欢

热点阅读