任何人都知道如何在mapState
函数中将mapGetters
或Vue 3
与setup
一起使用吗?
我知道可以通过useStore
钩子使用商店,但是通过此钩子,我们可以导入所有商店,而通过mapState
或mapGetters
可以指定module
: / p>
// ...
computed: {
...mapGetters('myModule', [
'myStateVariable'
]
)
//...
答案 0 :(得分:3)
据我所知,它们已经变平,因此您不能使用myModule/myStateVariable
,但是myStateVariable
应该可以使用。
随着Vuex进入RC版本,这可能会有所变化,但是现在如果您尝试两次使用相同的吸气剂,则会出现此错误
答案 1 :(得分:1)
也许是这样的:
import { computed } from 'vue';
import { useStore } from 'vuex';
const module = 'myModule';
export default {
setup() {
const store = useStore();
return {
// getter
one: computed(() => store.getters[`${module}/myStateVariable`],
// state
two: computed(() => store.state[module].myStateVariable,
};
},
};
答案 2 :(得分:0)
使用 vue 3 和 vuex 4 我设法这样做: 假设我们有如下所示的商店:
我们的一般商店 index.js(底部的那个)应该是这样的:
import { createStore, createLogger } from 'vuex';
import module1 from '@/store/module1';
import module2 from '@/store/module2';
export default createStore({
modules: {
module1: module1,
module2: module2,
},
plugins: process.env.NODE_ENV !== 'production'
? [createLogger()]
: []
})
而每个模块都有这样的 index.js:
import * as getters from './getters'
import * as actions from './actions'
import mutations from './mutations'
const state = {
postId: 10111,
}
export default {
namespaced: true,
state,
getters,
actions,
mutations,
}
每个模块中的 getter 都是这样的:
export const getPostId = state => {
return state.postId
}
最后在一个组件中,您可以像这样访问 getter:
<template>
<div>
<div class="major_container">
<p>{{ postIdFromModule1 }}</p>
<p>{{ postIdFromModule2 }}</p>
</div>
</div>
</template>
<script>
import { computed } from "vue";
import { useStore } from "vuex";
export default {
setup() {
const store = useStore();
const postIdFromModule1 = computed(() => store.getters["module1/getPostId"]);
const postIdFromModule2 = computed(() => store.getters["module2/getPostId"]);
return {
postIdFromModule1,
postIdFromModule2,
};
},
};
</script>
太好了,现在您可以使用命名空间的模块了!