내보낸 모듈 내에서 Vuex mapActions를 사용할 수 있습니까?
구성 요소로 가져오는 별도의 모듈에서 Vuex mapActions를 호출할 수 있습니까?
저는 vue.js 웹 앱에서 일련의 기능을 표준화하려고 합니다.각 구성 요소에 가져오기를 하고 몇 가지 값을 전달하여 기능을 작동시키고 싶습니다.vuex를 사용하여 상태를 관리하고 있습니다.현재 각 구성 요소는 로드될 때마다 이러한 기능을 호출합니다(동일하게 동일).
저는 이것을 하나의 모듈로 리팩터링하고 필요에 따라 각 구성요소로 가져오고 싶습니다.이 코드는 mapActions를 함수의 일부로 사용합니다.다음은 구성 요소, 모듈, vuex 작업과 관련된 코드입니다.
Vue 구성 요소:
//the imported function call
if (!this.queued){
timer.updatePage(this.pagination, this.orders);
}
모듈 코드(802.js):
import { mapActions } from 'vuex';
let currentComp = {
name: 'purchase',
date: null,
start: false
}
const timer = {
...mapActions(['currentComponent']),
updatePage(pagination, order) {
currentComp.name = 'nextComponent';
this.currentComponent(currentComp);
}
}
export default timer;
vuex 코드:
//in the actions section:
currentComponent({
commit
}, comp) {
console.log(comp);
commit('setCurrentComponent', comp);
}
//in the mutations section:
setCurrentComponent: (state, comp) => {
state.currentComponent = comp.name;
return state;
}
구성 요소가 가져온 기능을 실행하면 다음과 같이 표시됩니다.
vuex.esm.js?2f62:870 Uncaught TypeError: Cannot read property 'dispatch' of undefined
at Object.mappedAction [as currentComponent] (vuex.esm.js?2f62:870)
at eval (advance.js?935c:37)
이 항목에서 이 항목을 제거할 때.currentComponent i get:
advance.js?935c:37 Uncaught ReferenceError: currentComponent is not defined
at eval (advance.js?935c:37)
미리 안내해 주셔서 감사합니다.
mapActions
다음과 같은 모양의 메서드를 만들기 위한 바로 가기입니다.
currentComponent() {
this.$store.dispatch('xxx')
}
이 함수를 호출할 때,this
문맥은timer
.부터timer
를 가지고 있지 않습니다.$store
속성, 오류가 발생합니다.Cannot read property 'dispatch' of undefined
이것을 피하는 가장 빠른 방법은 그것을 바꾸는 것입니다.this
를 가진 구성 요소에 대한 컨텍스트$store
소유물.구성 요소를 세 번째 속성으로 전달하여 이 작업을 수행할 수 있습니다.updatePage
구속력이 있는currentComponent
함수에 대하여
// component code
timer.updatePage(this.pagination, this.orders, this);
// advance.js
const timer = {
...mapActions(['currentComponent']),
updatePage(pagination, order, component) {
currentComp.name = 'nextComponent';
this.currentComponent.bind(component)(currentComp);
}
}
하지만 이런 유형의 행동에는 믹스인을 사용하는 것이 좋습니다.
import { mapActions } from 'vuex';
let currentComp = {
name: 'purchase',
date: null,
start: false
}
const timerMixin = {
methods: {
...mapActions(['currentComponent']),
updatePage(pagination, order) {
currentComp.name = 'nextComponent';
this.currentComponent(currentComp);
}
}
}
export default timerMixin;
구성 요소에서 타이머 Mixin을 가져와 Mixin으로 등록합니다.그런 다음 이러한 메소드를 구성 요소에서 직접 사용할 수 있으며 기존 코드를 약간 수정하여 호출할 수 있습니다.
if (!this.queued){
this.updatePage(this.pagination, this.orders);
}
언급URL : https://stackoverflow.com/questions/56584963/is-it-possible-to-use-vuex-mapactions-inside-an-exported-module
'programing' 카테고리의 다른 글
sql에서 모든 그룹의 첫 번째 행 (0) | 2023.06.15 |
---|---|
무작위 선택에 "필수 질문" 포함 (0) | 2023.06.15 |
matplotlib에서 가로 세로 비율을 설정하려면 어떻게 해야 합니까? (0) | 2023.06.15 |
eplus를 통해 excel 공식을 호출합니다. (0) | 2023.06.15 |
셀의 숫자를 사용하여 셀 참조 생성 (0) | 2023.06.15 |