You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3与Vuex4使用时出现Cannot read properties of undefined (reading 'state')错误求助

解决Vue3 + Vuex4中Cannot read properties of undefined (reading 'state')的错误

这个问题我之前排查过好多次,根源其实出在你main.js里的插件注册方式上,咱们一步步来解决:

问题核心

你尝试通过一次app.use()调用同时注册路由和Vuex store,但Vue的use()方法每次只能处理一个插件,第二个参数会被当作第一个插件的配置选项,而不是第二个插件。这就导致你的Vuex store根本没被正确注入到应用中,组件里用useStore()拿到的是undefined,自然访问store.state就会抛出那个错误。

步骤1:修正main.js的插件注册

把use()调用拆成链式调用,分别注册路由和store:

import { createApp} from 'vue'
import App from './App.vue'
import router from './router'
import { createStore } from 'vuex';

const store = createStore({
 state(){
  return{
   message: 'hello'
  }
 }
})

// 改为链式调用,每个use注册一个插件
createApp(App)
  .use(router)
  .use(store)
  .mount('#app');

步骤2:完善App.vue的代码(可选但实用)

你的App.vue里return的是空对象,要是想在模板里使用message,得把它return出去;另外可以加个可选链判断,防止类似的注入问题再次发生:

<template>
  <div>{{ message }}</div>
</template>

<script>
import { computed } from 'vue'
import { useStore } from 'vuex'

export default {
  name: 'App',
  setup(){
    const store = useStore();
    // 用可选链做兜底,避免store未注入时直接报错
    const message = computed(() => store?.state?.message || '默认消息');
    
    console.log(message.value);
    // 必须返回message,模板才能访问到
    return{
      message
    }
  }
}
</script>

再解释下为什么之前的写法不对

Vue的app.use(plugin, options)方法的第二个参数是给第一个插件的配置参数,不是第二个插件。你之前的use(router, store)相当于把store当成路由的配置传给了vue-router,而Vuex store完全没被注册到应用里,组件内的useStore()自然拿不到实例,就抛出了undefined的错误。

内容的提问来源于stack exchange,提问作者Jason Greb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:23:12