Only works when getModule() from vuex-module-decorators is in the code
stefaanv opened this issue · 0 comments
stefaanv commented
The below code works fine, but when I remove the two getModule
calls (which aren't supposed to be there according to the examples), I get the underneath error message.
I'm using Vue 3.
<script lang="ts">
import { Component, Vue, Watch } from 'vue-property-decorator'
import { getModule } from 'vuex-module-decorators'
import { namespace } from 'vuex-class'
import Counter from '@/store/module/Counter'
import PositiveCounter from '@/store/module/PositiveCounter'
const counterStore = namespace('Counter')
const posCounterStore = namespace('PositiveCounter')
@Component({})
export default class CounterComp extends Vue {
// These two lines shouldn't be there according to the documentation
counterModule = getModule(Counter, this.$store)
posCounterModule = getModule(PositiveCounter, this.$store)
@counterStore.Getter('formatted') counterValue!: number
@counterStore.Action('decrement') decrementCounter!: () => void
@counterStore.Action('increment') incrementCounter!: () => void
@posCounterStore.Getter('formatted') posCounterValue!: number
@posCounterStore.Action('decrement') decrementPosCounter!: () => void
@posCounterStore.Action('increment') incrementPosCounter!: () => void
}
</script>
Error message when removing the `getModule()` calls
[Vue warn]: Error in v-on handler (Promise/async): "Error: ERR_ACTION_ACCESS_UNDEFINED: Are you trying to access this.someMutation() or this.someGetter inside an @Action?
That works only in dynamic modules.
If not dynamic use this.context.commit("mutationName", payload) and this.context.getters["getterName"]
Error: Could not perform action increment
at Store.eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:639:334)
at step (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:297:19)
at Object.eval [as next] (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:227:14)
at eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:199:67)
at new Promise (<anonymous>)
at __awaiter (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:178:10)
at Store.action (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:590:14)
at Array.wrappedActionHandler (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:860:23)
at Store.dispatch (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:525:15)
at Store.boundDispatch [as dispatch] (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:415:21)
Error: ERR_STORE_NOT_PROVIDED: To use getModule(), either the module
should be decorated with store in decorator, i.e. @Module({store: store}) or
store should be passed when calling getModule(), i.e. getModule(MyModule, this.$store)
at value (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:518:19)
at getModule (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:122:21)
at Store.eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:602:100)
at step (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:297:19)
at Object.eval [as next] (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:227:14)
at eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:199:67)
at new Promise (<anonymous>)
at __awaiter (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:178:10)
at Store.action (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:590:14)
at Array.wrappedActionHandler (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:860:23)"
found in
---> <CounterComp> at src/components/Counter.vue
<App> at src/App.vue
<Root>
warn @ vue.runtime.esm.js?2b0e:619
logError @ vue.runtime.esm.js?2b0e:1893
globalHandleError @ vue.runtime.esm.js?2b0e:1888
handleError @ vue.runtime.esm.js?2b0e:1848
eval @ vue.runtime.esm.js?2b0e:1865
Promise.catch (async)
invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1865
invoker @ vue.runtime.esm.js?2b0e:2188
original._wrapper @ vue.runtime.esm.js?2b0e:6961
vue.runtime.esm.js?2b0e:1897 Error: ERR_ACTION_ACCESS_UNDEFINED: Are you trying to access this.someMutation() or this.someGetter inside an @Action?
That works only in dynamic modules.
If not dynamic use this.context.commit("mutationName", payload) and this.context.getters["getterName"]
Error: Could not perform action increment
at Store.eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:639:334)
at step (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:297:19)
at Object.eval [as next] (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:227:14)
at eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:199:67)
at new Promise (<anonymous>)
at __awaiter (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:178:10)
at Store.action (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:590:14)
at Array.wrappedActionHandler (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:860:23)
at Store.dispatch (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:525:15)
at Store.boundDispatch [as dispatch] (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:415:21)
Error: ERR_STORE_NOT_PROVIDED: To use getModule(), either the module
should be decorated with store in decorator, i.e. @Module({store: store}) or
store should be passed when calling getModule(), i.e. getModule(MyModule, this.$store)
at value (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:518:19)
at getModule (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:122:21)
at Store.eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:602:100)
at step (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:297:19)
at Object.eval [as next] (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:227:14)
at eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:199:67)
at new Promise (<anonymous>)
at __awaiter (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:178:10)
at Store.action (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:590:14)
at Array.wrappedActionHandler (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:860:23)
at Store.eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:639:38)
at step (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:297:19)
at Object.eval [as next] (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:227:14)
at eval (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:199:67)
at new Promise (<anonymous>)
at __awaiter (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:178:10)
at Store.action (webpack-internal:///./node_modules/vuex-module-decorators/dist/esm/index.js:590:14)
at Array.wrappedActionHandler (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:860:23)
at Store.dispatch (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:525:15)
at Store.boundDispatch [as dispatch] (webpack-internal:///./node_modules/vuex/dist/vuex.esm.js:415:21)
Counter.ts
import { VuexModule, Module, Mutation, Action } from 'vuex-module-decorators'
@Module({ namespaced: true, name: 'Counter' })
class Counter extends VuexModule {
value = 10
@Action({ commit: 'mutUpdateCounter' })
increment() {
return 1
}
@Action({ commit: 'mutUpdateCounter' })
decrement() {
return -1
}
@Mutation
mutUpdateCounter(increase: number) {
this.value += increase
}
get formatted() {
return `counter = ${this.value}`
}
}
export default Counter
index.ts
import Vue from 'vue'
import Vuex from 'vuex'
import Counter from './module/Counter'
import PositiveCounter from './module/PositiveCounter'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: { Counter, PositiveCounter },
})
// store.registerModule('Counter', CounterStore)
export default store