경로가 변경될 때마다 Vuex Getters 중복 키
FireBase에서 객체 배열을 가져와 V-for를 사용하여 문자 구성 요소를 목록 형식으로 표시합니다.홈페이지에 접속하여 캐릭터 페이지로 돌아갈 때마다 목록이 증가하여 중복된 키가 나타납니다.
characters.vue:
<template>
<ul class="characters-list">
<li v-for="allHero in getAllHeros" v-bind:key="allHero.id">
<router-link :to="{ name: 'characterDetail', params: { id: allHero.id } }">
<div class="hero-thumbnail">
<img :src="allHero.imageUrl" :alt="allHero.title" />
</div>
<div class="hero-detail">
<h3>{{ allHero.name }}</h3>
</div>
</router-link>
</li>
</ul>
</template>
import database from "@/firebase/init";
computed: {
...mapGetters({ getAllHeros: "getAllHeros" }),
},
created() {
database
.collection("heros")
.get()
.then(snapshot => {
snapshot.forEach(doc => {
let heros = doc.data();
heros.id = doc.id;
this.$store.dispatch('fetchAllHeros', heros)
});
});
}
VUEX 모듈 -
const state = {
allHeros: []
};
const getters = {
getAllHeros: state => {
return state.allHeros;
}
};
const actions = {
async fetchAllHeros({ commit }, heros) {
commit("setAllHeros", heros);
}
};
const mutations = {
setAllHeros: (state, payload) => {
state.allHeros.push(payload);
}
};
새 페이지로 라우팅할 때 Vuex 저장소가 반드시 초기 상태로 재설정되는 것은 아닙니다.따라서 해당 컴포넌트가 생성될 때마다 vuex 저장소에 더 많은 히어로가 추가되어 중복된 히어로가 추가됩니다.
이를 방지하려면 간단한 논리를 사용하여 영웅이 로드되었는지 확인할 수 있습니다.
created() {
if(this.getAllHeros.length == 0){
//Get heros from database..
};
}
언급URL : https://stackoverflow.com/questions/58861384/duplicate-keys-vuex-getters-every-time-route-changes
'programing' 카테고리의 다른 글
Django 및 Python을 사용하여 JSON 응답 생성 (0) | 2022.11.06 |
---|---|
팬더 데이터 프레임에 목록 가져오기 (0) | 2022.11.06 |
인식할 수 없는 문 유형입니다.(위치 0의 "WITD" 근처) (0) | 2022.11.06 |
PermGen과 Metaspace의 차이점은 무엇입니까? (0) | 2022.11.06 |
SQL/MariaDB INSERT 결과를 얻는 방법 (0) | 2022.11.06 |