vuex: count 未在 vue 组件文件中定义

vuex: count is not defined in vue component file

刚开始将 vuex 集成到我的 laravel 应用程序中,正在研究官方 vuex 文档中的示例计数器应用程序。

js/components/calculate.vue

<template>
  <div>
    <p>{{ count }}</p>
    <p>
      <button @click="increment">+</button>
      <button @click="decrement">-</button>
    </p>
  </div>
</template>
<script >
  import store from '../app.js'

  export default {
    computed: {
      count () {

        return store.state.count
      }
    },
    methods: {
      increment () {
        store.commit('increment')
      },
      decrement () {
        store.commit('decrement')
      }
    }
  }
</script>

js/app.js

const calculate = Vue.component('calculate', require('./components/calculate.vue'));

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



const app = new Vue({
  el: '#app'
});

使用 webpack 构建

我在这行 store.state.count 未定义错误 return store.count

如果您在 app.js 文件中创建商店,(因为您没有提到)您需要添加

const calculate = Vue.component('calculate', require('./components/calculate.vue'));

Vue.use(Vuex) // this line

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

const app = new Vue({
  el: '#app'
});

这不言而喻,您需要在此文件中导入Vuex

之后您需要修改这部分代码:

const app = new Vue({
  el: '#app'
});

const app = new Vue({
  el: '#app',
  store // if you're vue-cli/babel else use store: store
});

并且在js/components/calculate.vue

<template>
  <div>
    <p>{{ count }}</p>
    <p>
      <button @click="increment">+</button>
      <button @click="decrement">-</button>
    </p>
  </div>
</template>
<script >
 // import store from '../app.js' this import is not required

  export default {
    computed: {
      count () {
        return this.$store.state.count
      }
    },
    methods: {
      increment () {
        this.$store.commit('increment')
      },
      decrement () {
        this.$store.commit('decrement')
      }
    }
  }
</script>

不需要导入,因为 vue 实例的每个组件都应该可以访问 store,要访问它,您只需要访问 $store vue 实例的 属性 在您的组件中是 this (只要上下文不通过回调或类似的方式改变。)