반응형
하위에서 스토어 변경을 트리거해도 스토어가 업데이트되지 않습니다.
부모 파일 html
<div v-if="!refresh" class="c-focus-mode">
<div class="c-focus-mode__container">
<div class="c-focus-mode__container-left">
<slide-card
focus
hideBottom
:slideID="slideID"
:index="orderIndex"
:totalCount="5"
:totalDuration="10"
:isMobile="false"
>
// Does not work (1)
<template v-slot:prevSlideBtnLeft>
<app-button
v-if="!prevInvalid"
type="circular"
class="c-slide-card-preview__btn c-slide-card-preview__btn--prev"
@click="goToSlide(-1)"
><app-icon name="chevron-left"></app-icon>
</app-button>
</template>
<template v-slot:nextSlideBtnRight>
<app-button
v-if="!nextInvalid"
type="circular"
class="c-slide-card-preview__btn c-slide-card-preview__btn--next"
@click="goToSlide(1)"
><app-icon name="chevron-right"></app-icon>
</app-button>
</template>
</slide-card>
// Works below (2)
<div
class="c-focus-mode__container-left-navigation"
:class="{['c-focus-mode__container-left-navigation--no-prev']: prevInvalid}"
>
<app-button
v-if="!prevInvalid"
type="circular"
class="c-slide-card-preview__btn c-slide-card-preview__btn--prev"
@click="goToSlide(-1)"
><app-icon name="chevron-left"></app-icon>
</app-button>
<app-button
v-if="!nextInvalid"
type="circular"
class="c-slide-card-preview__btn c-slide-card-preview__btn--next"
@click="goToSlide(1)"
><app-icon name="chevron-right"></app-icon>
</app-button>
</div>
</div>
<slide-card
focus
hideTop
:slideID="slideID"
:index="orderIndex"
:totalCount="5"
:totalDuration="10"
:isMobile="false"
>
</slide-card>
</div>
</div>
앱 버튼 컴포넌트에 의해 호출되는 함수
public goToSlide(increment) {
const newIndex = this.orderIndex + increment;
if (newIndex < 0 || newIndex >= this.deckSlides.length) {
return;
}
this.setActiveSlide(newIndex);
}
private setActiveSlide(index) {
this.slideIndex = index + 1;
const { deckID, ID: slideID } = this.deckSlides[index];
if (deckID && slideID) {
this.$store.dispatch('deck/setActiveSlides', { deckID, slideID });
history.replaceState({}, null, `/d/${this.deckID}/edit/focus/${index + 1}`);
}
}
「아래의 작업」(2)의 버튼에서 goToSlide를 호출하면 스토어가 정상적으로 갱신되지만, 「동작하지 않는다」(1)의 버튼에서 같은 기능을 호출하면 스토어가 갱신되지 않는다.부모에서 goToSlide 기능을 트리거하기 위한 액션을 슬라이드 카드에서 내보내려고 하면 같은 현상이 발생합니다.
문제는 슬롯 내에서 메서드를 호출하려고 하는데 디폴트로는 슬롯은 부모 컴포넌트에 정의되어 있는 데이터와 메서드에 액세스할 수 없다는 것입니다.
「스코프 슬롯」이라고 불리는 슬롯의 메서드에 액세스 할 수 있습니다.이 메서드에 대한 매뉴얼링크는 다음과 같습니다.
또한 이 답변은 도움이 될 수 있습니다.
언급URL : https://stackoverflow.com/questions/65090197/triggering-from-child-to-change-the-store-does-not-updates-the-store
반응형
'source' 카테고리의 다른 글
새로고침 시 Vue 라우터가 홈 페이지로 리디렉션됨 (0) | 2022.08.21 |
---|---|
도트(".") 연산자와 화살표("->") 연산자가 C와목표-C (0) | 2022.08.21 |
PDF 형식의 C89/C90 표준은 어디에서 찾을 수 있습니까? (0) | 2022.08.19 |
char* 포인터에는 문자열을 할당할 수 있지만 char[] 배열에는 할당할 수 없는 이유는 무엇입니까? (0) | 2022.08.19 |
v-for 루프에서 서로 다른 onClick 함수를 호출합니다. (0) | 2022.08.19 |