我已经阅读了类似标题的问题,但由于其复杂性,我无法遵循它们。我认为使用我的代码可以更容易地为我找到解决方案。我只会包含相关的代码。
我的商店是这样的: obs:我安装了vuex插件。
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)
const state = {
titulo: "please, change title"
}
const mutations = {
changeTitle(state, title) {
state.title= title
}
}
export default new Vuex.Store({
state : state,
mutations : mutations
})
我的App.vue
<template>
<div>
<show-title-component ></show-title-component>
<change-title-component></change-title-component>
</div>
</template>
<script>
import ShowTitleComponent from './components/ShowtitleComponent';
import ChangeTitleComponent from './components/ChangeTitleComponent';
import store from './vuex/store';
export default {
components: {ShowTitleComponent, ChangeTitleComponent},
store,
data: function() {
return {title: 'placeholder'}
}
}
</script>
生成错误的组件:
<template><div>{{ title}}</div></template>
<script>
export default {
name: "show-title-component",
computed: {
title() {
return this.$store.state.title /** error here */
}
}
}
</script>
答案 0 :(得分:12)
也许,您没有在{strong> Vue 实例中包含store
您的应用入口点(app.js或main.js或index.js)必须包含以下代码:
import store from './vuex/store'
new Vue({
...
store,
...
})
然后您可以在任何组件中使用this.$store
答案 1 :(得分:2)
在你的 main.js 文件中
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import Vuex from 'vuex';
import {store} from './store' //use curly braces to around store.
Vue.config.productionTip = false;
Vue.use(Vuex);
new Vue({
router,
store,
render: (h) => h(App),
}).$mount("#app");
这对我有用。
答案 2 :(得分:0)
商店文件应该是Javascript(.js)文件。更改文件名并重新启动服务器会导致此问题。$ tore错误消失。
错误实际上在这里:
App.vue
import store from './vuex/store'; /** in my case, it should be js file. */
答案 3 :(得分:0)
1.确保将其创建为商店目录
2。npm i vuex -S
3.确保src/store/index.js
有import Vuex from 'vuex'
和Vue.use(Vuex)
4.确保src/main.js
有import store from './store'
答案 4 :(得分:0)
就我而言,我正在使用模块。我可以毫无问题地访问突变,动作和吸气剂。但不是状态。解决方案是在使用模块时,状态应使用模块的命名空间进行访问。
检查documentation以获得更多信息。
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> `moduleA`'s state
store.state.b // -> `moduleB`'s state
默认情况下,模块内的动作,变异和获取方法仍会在全局名称空间下注册