【问题标题】:using mapState in vue + typescript在 vue + typescript 中使用 mapState
【发布时间】:2021-09-13 03:57:36
【问题描述】:

在远离 vue 多年后,我正在用 vue+vuex+typescript 编写应用程序。我明白了概念,但很多东西都变了!

我在尝试使用 vuex mapState 辅助函数时遇到了一个奇怪的问题。我有一个名为 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 样式路径中工作,但也因为我可以在开发工具中看到它:

我一直在查看文档,但无法完全弄清楚。有什么想法吗?

【问题讨论】:

    标签: typescript vue.js vuex


    【解决方案1】:

    在您的代码中,我没有看到您已将 Vuex 模块命名为命名空间。我不知道打字稿的语法,但在普通的 JS 中你会这样做

    const store = {
      modules: {
        animationCanvas: {
           namespaced: true,
           state: ...
        }
      }
    }
    

    您可以通过在组件中执行console.log(this.$store) 并查看对象的结构来检查这一点。在你的吸气剂中,你应该有这样的东西:

    getters: {
       'animationCanvas/frames': ...
    }
    

    【讨论】:

    • 啊,这有点让人脸红:P 当我查看this.$store.state.animationCanvas.frames 的路径并认为它已经被命名空间时,我被绊倒了。我忘了我必须实际告诉模块要命名空间。谢谢!
    猜你喜欢
    • 2022-01-14
    • 2019-09-25
    • 2019-05-23
    • 2019-01-03
    • 2018-12-25
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多