为何App.vue类中从Vuex Store获取的getter值为undefined?
我帮你梳理下代码里可能出问题的几个点,大概率是这些原因导致的:
命名空间不匹配
你用getStoreAccessors<DispatchState, RootState>("Test")指定了命名空间为"Test",但你的模块对象是dispaVuex,要确认注册到Vuex时,是否把这个模块以"Test"的名字添加到root store的modules里了?举个正确的注册示例:
const store = new Vuex.Store<RootState>({ modules: { Test: dispaVuex // 这里的键名必须和getStoreAccessors的命名空间参数完全一致 } });如果这里的键名和
"Test"不匹配(比如写成dispaVuex: dispaVuex),getStoreAccessors就找不到对应模块,自然返回undefined。Getter属性拼写错误
看你的getter代码:return state.dispatch.fistTime;,这里的fistTime是不是拼写错误?如果Dispatcher类里定义的是firstTime,那拼写错误会直接导致取不到值,返回undefined。State类型与实际结构不匹配
你的getter参数标注为state: DispatchState,要确认DispatchState的类型定义是否正确包含了dispatch: Dispatcher这个属性?如果类型定义和实际state结构不一致,TypeScript可能没报错,但运行时会找不到对应属性。Dispatcher实例初始化问题
你的state里dispatch: new Dispatcher(appState),要确认appState是否正确初始化了firstTime(或fistTime)属性?如果Dispatcher构造函数没有给这个属性赋值,那它本身就是undefined,getter自然返回undefined。
优先排查命名空间不匹配的问题,这是vuex-typescript里最容易踩的坑,命名空间字符串和模块注册的键名必须完全一致,包括大小写!
内容的提问来源于stack exchange,提问作者Yazeed Sabri

