typescript - 在 vue + typescript 中使用 mapState
问题描述
在远离 vue 多年后,我正在用 vue+vuex+typescript 编写应用程序。我明白了这些概念,但发生了很多变化!
我在尝试使用 vuexmapState
辅助函数时遇到了一个奇怪的问题。我有一个名为的商店模块animationCanvas
:
import { Module } from 'vuex'
import { RootState } from '../types'
import { AnimationCanvasState } from './types'
const state: AnimationCanvasState = {
frames: [],
}
export const animationCanvas: Module<AnimationCanvasState, RootState> = {
state,
}
我将它拉入我的根存储模块并注册它:
import { createStore, StoreOptions } from 'vuex'
import { RootState } from './types'
import { animationCanvas } from '@/store/modules/AnimationCanvas'
const store: StoreOptions<RootState> = {
modules: {
animationCanvas,
},
}
当我使用直接从$store
属性中提取的组件中的商店时,它可以正常工作:
import { Vue, Options } from 'vue-class-component';
@Options({
name: 'Animation Canvas',
computed: {
frames() {
return this.$store.state.animationCanvas.frames;
},
},
})
export default class AnimationCanvas extends Vue {
...
但是当我尝试通过mapState
辅助函数添加它时,我什么也没得到:
import { Vue, Options } from 'vue-class-component';
import { mapState } from 'vuex';
@Options({
name: 'Animation Canvas',
computed: {
...mapState('animationCanvas', ['frames']),
},
})
export default class AnimationCanvas extends Vue {
而且我知道该模块在那里并且命名正确,部分是因为它在$store
样式路径中工作,但也因为我可以在开发工具中看到它:
我一直在寻找文档,但我无法弄清楚。有任何想法吗?
解决方案
在您的代码中,我没有看到您已命名 Vuex 模块。我不知道打字稿的语法,但在普通的 JS 中你会这样做
const store = {
modules: {
animationCanvas: {
namespaced: true,
state: ...
}
}
}
您可以通过console.log(this.$store)
在组件中执行并查看对象的结构来检查这一点。在你的吸气剂中,你应该有类似的东西:
getters: {
'animationCanvas/frames': ...
}
推荐阅读
- python - 在 python 中将一个简单的字符串写入 .txt 文件突然不起作用
- ruby-on-rails - 简单形式上的 Rails 参数存在但不通过 ActionController::ParameterMissing 强参数
- python - 使用 ThreadPoolExecutor 时记录线程
- php - axios 删除路由不支持 laravel vuejs
- r - 在 R 中连接具有连续列名的 .xlsx 文件
- c# - 我正在尝试创建新对象,并将它们添加到对象列表中,但是我遇到了一些问题,here
- c# - C# 可以在 SQL 连接错误时返回连接字符串吗?
- python-3.x - Python 手套缺少模块“手套”“手套”
- elasticsearch - 获取所有时间 date_histogram 桶结果
- javascript - 无法在 axios 回调中访问正确的 this 上下文反应本机