반응형
별도의 모듈에서 namesleded 액션을 디스패치할 수 없음: [vuex] 알 수 없는 액션 유형
두 개의 모듈이 있습니다.activities
그리고.alerts
이 경우,activity
추가된 경우 이름 지정 액션과 함께 경보를 발송합니다.alerts/SHOW
.
이것은 컴포넌트에서 직접 액션을 호출했을 때 동작합니다(커맨드를 사용하여).createNamespacedHelpers
Vuex에서 네임스페이스 사용alerts
).
그러나 다른 네임 슬롯 모듈에서 액션을 디스패치하면 다음 오류 메시지가 나타납니다.
[vuex] unknown action type: SHOW
제가 뭘 잘못했는지 모르겠어요.
전화하겠습니다.ADD
다른 사람과 함께 행동하다createNamespacedHelpers
를 위해activities
네임스페이스.저도 사용하고 있습니다.{ root: true }
옵션(Vuex 모듈 매뉴얼에 기재되어 있습니다.
[ Add Activity Button ]를 선택합니다.표시하다
<template>
<button @click="addActivity(activity)"
type="button"
:disabled="activityCount >= maxActivities"
class="btn btn-secondary">{{ activity.name }}
</button>
</template>
<script>
import { createNamespacedHelpers } from "vuex";
import { ADD } from "@/store/modules/activities";
const { mapActions, mapGetters, mapState } = createNamespacedHelpers(
"activities"
);
export default {
methods: {
...mapActions({
addActivity: ADD
})
},
computed: {
...mapState(["maxActivities"]),
...mapGetters(["activityCount"])
},
props: {
activity: {
type: Object,
required: true
}
}
};
</script>
활동.js
import uuid from "uuid/v4";
import { SHOW as SHOW_ALERT } from "@/store/modules/alerts";
export const ADD = "ADD";
export const RESET = "RESET";
export const MAX_ACTIVITIES = 15;
const state = {
items: [
{ id: 1, name: "A" },
{ id: 2, name: "B" },
{ id: 3, name: "C" },
{ id: 4, name: "D" },
{ id: 5, name: "E" },
{ id: 6, name: "F" }
],
activities: [],
maxActivities: MAX_ACTIVITIES
};
const getters = {
activityCount(state) {
return state.activities.length;
}
};
const mutations = {
[ADD](state, activity) {
state.activities = [...state.activities, { ...activity, id: uuid() }];
},
[RESET](state) {
state.activities = [];
}
};
const actions = {
[ADD]({ dispatch, commit, getters }, activity) {
if (getters.activityCount >= MAX_ACTIVITIES) {
return null;
}
if (getters.activityCount > 1) {
dispatch(SHOW_ALERT, null, { root: true }); // This is the problematic line.
}
commit(ADD, activity);
}
};
export default {
namespaced: true,
state,
mutations,
actions,
getters
};
alerts.syslog
export const SHOW = "SHOW";
const state = {
show: false
};
const mutations = {
[SHOW](state) {
state.show = true;
}
};
const actions = {
[SHOW]({ commit }) {
commit(SHOW);
}
};
export default {
namespaced: true,
state,
mutations,
actions
};
store.displaces를 설정합니다.
import Vue from "vue";
import Vuex from "vuex";
import activities from "./modules/activities";
import alerts from "./modules/alerts";
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
activities,
alerts
}
});
디스패치 시 액션 이름 공간을 지정해야 합니다.
dispatch('alerts/' + SHOW_ALERT, null, { root: true });
템플릿 리터럴을 사용하는 방법은 다음과 같습니다.
dispatch(`alerts/${SHOW_ALERT}`, null, { root: true });
이것은 컴포넌트에서 모듈스토어의 액션을 디스패치하는 경우입니다.
this.$store.dispatch("alerts/SHOW", data);
언급URL : https://stackoverflow.com/questions/49972028/cannot-dispatch-namespaced-action-from-a-separate-module-vuex-unknown-action
반응형
'programing' 카테고리의 다른 글
스택에서보다 힙 내의 데이터에 더 빨리 액세스할 수 있습니까? (0) | 2022.07.26 |
---|---|
Java에서 정적 메서드에서 getClass()를 호출하려면 어떻게 해야 합니까? (0) | 2022.07.24 |
잭슨 JSON으로:미식별 필드, 무시하기로 표시되지 않다. (0) | 2022.07.24 |
console.log 없이 vuej 로그인 (0) | 2022.07.24 |
소수점 이하 두 자리까지 반올림하다 (0) | 2022.07.24 |