2016-12-09 2 views
1

Ich habe Schwierigkeiten, ein Projekt mit vuejs und vuex zu entwickeln, aber es funktioniert nicht mit this.$store.state.count in der Komponente. Warum?

Meine config:

"vuex": "^2.0.0" 

store.js:

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

export default new Vuex.Store({ 
    state: { 
    count: 12 
    }, 
    mutations: { 
    increment (state) { 
     state.count++ 
    } 
    }, 
    strict: true 
}) 

main.js:

import store from './vuex/store' 
import Vue from 'vue' 

new Vue({ 
    store, 
    . 
    . 
    . 
}).$mount('#app') 

component.js:

<script> 
export default { 
    name: 'landing-page', 
    created:() => { 
     console.log('status2') 
     console.log(this.$store.state.count) 
    } 
    } 
</script> 

Fehler:

Uncaught TypeError: Cannot read property '$store' of undefined 
+5

Der Fehler bedeutet nicht, dass '$ store' nicht definiert ist. Gründlich durchlesen. Es besagt, dass "dies" nicht definiert ist. – Xufox

+0

Oh ja. 'this' ist undefiniert. Warum kann ich 'this' hier nicht benutzen? – steve

+0

'this' in der Komponente bezieht sich auf' data'. – joaumg

Antwort

1

Sie werden nie, nie den Speicher direkt bearbeiten.

Sie werden IMMER Mutationen auslösen.

Wie so (component.js):

<script> 
import store from './vuex/store' 

export default { 
    name: 'landing-page', 
    computed: { 
    counter() { 
     return store.state.count // get state 
    } 
    }, 
    created:() => { 
    store.commit('increment') // set state 
    } 
} 
</script> 
+1

Danke. Aber ich will nur Status bekommen, nicht festgelegt. – steve

+0

Bearbeitet, um das Get-Teil zu reflektieren (; – joaumg

+0

Ich verstehe dieses Beispiel nicht als Vue noob. Beispiele zeigen mir, dass ein Geschäft instanziiert und an Vue übergeben wird. Wenn Sie 'store' in diesem Beispiel importieren, importieren Sie ein Exemplar Vuex Objekt dann? Warum sollte es nicht in irgendeiner Weise von Vue überliefert werden? –

Verwandte Themen