Search code examples
javascriptvue.jsvuex

Store vuex Cannot read property 'store' of undefined"


I tried to create a first simple App but I have a problem with store.

I have in mainJS

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App'
import router from './router'

Vue.use(Vuex);


import {store} from './Store.js';
store.commit('increment')

new Vue({
  el: '#app',
  router,
   store,
  template: '<div><App></App></div>',
  components: { App }
});

So in my store.js

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

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

So I would create a child component of App Component that use a event increment, so I have created a Component Counter

<template>
    <div>{{ count }}</div>
</template>
<script>

export default {

    name: "Counter",
    computed: {
        count () {
            return this.$.store.state.count
        }
    }

}
</script>

And I call this component from my App component that it is:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-view/>
    <Counter></Counter>
  </div>
</template>

<script>
import Counter from './components/Counter.vue'
export default {
  name: 'app',
  components:{
      Counter
  }
}
</script>

But I have this error in my Counter component:

[Vue warn]: Error in render: "TypeError: Cannot read property 'store' of undefined"

found in

---> at src\components\Counter.vue at src\App.vue


Solution

  • You only made a small mistake: It has to be $store, not $.store:

    <template>
        <div>{{ count }}</div>
    </template>
    
    <script>
    export default {
        name: "Counter",
        computed: {
            count () {
                return this.$store.state.count
            }
        }
    }
    </script>