Vuex:功能范围模块中未知 Getter
Vuex: Unknown Getter in a Feature-Scoped Module
我第一次在“功能范围结构”中使用 Vuex 存储,一直难以追踪为什么我得到 [vuex] unknown getter: $_kp/kp
-(Vue/Vuex 没有抛出除了引用的错误之外,还有很多问题。
UPDATE:我打开了 store.subscribeAction()
以查看是否会提供更多信息。这是打印的日志(我没有看到任何有用的信息,但希望它对您有所帮助)。
Action Type: $_kp/getKpIndex
Action Payload: undefined
Current State: {ob: Observer} $_kp: Object kp: "2" //<- That is what I'm trying to get - "2"!
UPDATE-2: 我现在也在使用 Vues Inspector,它显示以下内容:
| State
| - $_kp: object
| - kp: "3"
| Mutation
| - payload: "3"
| - type: "$_kp/KP_DATA_UPDATED"
非常感谢任何帮助,我希望这对以这种方式设置商店的人有用。
SomeElement.vue:
<script>
import {mapGetters} from 'vuex';
import store from '../_store';
export default {
name : 'KpIndexElement',
parent: 'AVWX',
computed: {
...mapGetters({
kp: '$_kp/kp', //<-- HERE?
}),
},
created() {
const STORE_KEY = '$_kp';
if (!(STORE_KEY in this.$store._modules.root._children)) {//<= I think there is an issue with this too
this.$store.registerModule(STORE_KEY, store);
}
},
mounted() {
this.$store.dispatch('$_kp/getKpIndex');
},
}
</script>
<template>
<p><strong>Kp: </strong>{{ kp }}</p>
</template>
商店index.js
import actions from './actions';
import getters from './getters';
import mutations from './mutations';
var state = {
kp: '',
};
export default {
namespaced: true,
state,
actions,
getters,
mutations,
};
actions.js:
import api from '../_api/server';
const getKpIndex = (context) => {
api.fetchKpData
.then((response) => {
console.log('fetch response: ' + response)
context.commit('KP_DATA_UPDATED', response);
})
.catch((error) => {
console.error(error);
})
}
export default {
getKpIndex,
}
mutations.js
const KP_DATA_UPDATED = (state, kp) => {
state.kp = kp;
}
export default {
KP_DATA_UPDATED,
}
...最后 getters.js
const kp = state => state.kp;
export {
kp,
};
使用命名空间时 mapGetters
的语法如下:
...mapGetters('namespace', [
'getter1',
'getter2',
... // Other getters
])
你的情况:
...mapGetters('$_kp', [
'kp'
])
第一个参数是命名空间,第二个参数是包含您要使用的 getter 的负载。
此外,正如@Ijubadr 在评论中指出的那样,我不确定在您注册 store
模块后是否对 mapGetters
进行了评估。要解决这个问题,您可能必须放弃使用 mapGetters
并将 STORE_KEY
声明为数据,然后在其定义中使用 STORE_KEY
定义计算的 getter(我在下面的示例中将其重命名为 storeKey
,因为这不再是常量):
computed: mapState('$_kp',{
kpIndex: 'kp'
}),
created() {
this.storeKey = '$_kp';
if (!(this.storeKey in this.$store._modules.root._children)) {
this.$store.registerModule(this.storeKey, store);
}
},
mounted() {
this.$store.dispatch('$_kp/getKpIndex');
}
我第一次在“功能范围结构”中使用 Vuex 存储,一直难以追踪为什么我得到 [vuex] unknown getter: $_kp/kp
-(Vue/Vuex 没有抛出除了引用的错误之外,还有很多问题。
UPDATE:我打开了 store.subscribeAction()
以查看是否会提供更多信息。这是打印的日志(我没有看到任何有用的信息,但希望它对您有所帮助)。
Action Type: $_kp/getKpIndex
Action Payload: undefined
Current State: {ob: Observer} $_kp: Object kp: "2" //<- That is what I'm trying to get - "2"!
UPDATE-2: 我现在也在使用 Vues Inspector,它显示以下内容:
| State
| - $_kp: object
| - kp: "3"
| Mutation
| - payload: "3"
| - type: "$_kp/KP_DATA_UPDATED"
非常感谢任何帮助,我希望这对以这种方式设置商店的人有用。
SomeElement.vue:
<script>
import {mapGetters} from 'vuex';
import store from '../_store';
export default {
name : 'KpIndexElement',
parent: 'AVWX',
computed: {
...mapGetters({
kp: '$_kp/kp', //<-- HERE?
}),
},
created() {
const STORE_KEY = '$_kp';
if (!(STORE_KEY in this.$store._modules.root._children)) {//<= I think there is an issue with this too
this.$store.registerModule(STORE_KEY, store);
}
},
mounted() {
this.$store.dispatch('$_kp/getKpIndex');
},
}
</script>
<template>
<p><strong>Kp: </strong>{{ kp }}</p>
</template>
商店index.js
import actions from './actions';
import getters from './getters';
import mutations from './mutations';
var state = {
kp: '',
};
export default {
namespaced: true,
state,
actions,
getters,
mutations,
};
actions.js:
import api from '../_api/server';
const getKpIndex = (context) => {
api.fetchKpData
.then((response) => {
console.log('fetch response: ' + response)
context.commit('KP_DATA_UPDATED', response);
})
.catch((error) => {
console.error(error);
})
}
export default {
getKpIndex,
}
mutations.js
const KP_DATA_UPDATED = (state, kp) => {
state.kp = kp;
}
export default {
KP_DATA_UPDATED,
}
...最后 getters.js
const kp = state => state.kp;
export {
kp,
};
使用命名空间时 mapGetters
的语法如下:
...mapGetters('namespace', [
'getter1',
'getter2',
... // Other getters
])
你的情况:
...mapGetters('$_kp', [
'kp'
])
第一个参数是命名空间,第二个参数是包含您要使用的 getter 的负载。
此外,正如@Ijubadr 在评论中指出的那样,我不确定在您注册 store
模块后是否对 mapGetters
进行了评估。要解决这个问题,您可能必须放弃使用 mapGetters
并将 STORE_KEY
声明为数据,然后在其定义中使用 STORE_KEY
定义计算的 getter(我在下面的示例中将其重命名为 storeKey
,因为这不再是常量):
computed: mapState('$_kp',{
kpIndex: 'kp'
}),
created() {
this.storeKey = '$_kp';
if (!(this.storeKey in this.$store._modules.root._children)) {
this.$store.registerModule(this.storeKey, store);
}
},
mounted() {
this.$store.dispatch('$_kp/getKpIndex');
}