fetch({store}) {
return store.dispatch('posts/loadPosts')
},
이런식으로 pages/index.vue에 해놨는데 처음에는 스크롤 함수에 있는
onScroll() {
if(window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) {
if(this.hasMorePost) {
this.$store.dispatch('posts/loadPosts')
}
}
}
이거 때문에 스크롤 해야 loadPosts가 불리고
Duplicate keys detected: '4'. This may cause an update error 이러한 에러가 뜨면서 중복되서 잠시 온스크롤 함수를 주석처리 해놓고 보니 fetch가 아예 실행이 안되더라구요
도대체 어떤문제인지 햇갈려서 알수 없어서 ㅜ 연락드립니다.
<template>
<v-container>
<post-form v-if='me' />
<div>
<post-card v-for="p in mainPosts" :key="p.id" :post="p" />
</div>
</v-container>
</template>
<script>
import PostForm from '~/components/PostForm'
import PostCard from '~/components/PostCard'
export default {
components: {
PostForm,
PostCard,
},
data() {
return {
name : 'Nust.js'
}
},
fetch({store}) {
return store.dispatch('posts/loadPosts')
},
computed: {
me() {
return this.$store.state.users.me
},
mainPosts() {
return this.$store.state.posts.mainPosts
},
hasMorePost() {
return this.$store.state.posts.hasMorePost
}
},
mounted() {
window.addEventListener('scroll', this.onScroll)
},
beforeDestroy() {
window.removeEventListener('scroll', this.onScroll)
},
methods: {
onScroll() {
if(window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) {
if(this.hasMorePost) {
this.$store.dispatch('posts/loadPosts')
}
}
}
}
}
</script>
<style>
</style>
참고하실 풀 index.vue 코드 보내드려요!
예 감사합니다 제로초님!!
fetch를 통해 loadPost가 불린게 아니고, onScroll 함수를 통해서 스크롤을 움직일때 불렸던 거네요!
fetch를 통해 불리게 하려면 store/posts의 action 안에 loadPost 에 async를 달아 놓으니 제로초님 처럼 문제 없이 됩니다
혹시 같은 문제 있다면 참고해주세요~^^