Vuex 스토어에서 모든 인스턴스를 업데이트합니다. 현재 인스턴스만 업데이트하십시오.
사용자가 댓글을 좋아하거나 싫어할 수 있는 간단한 블로그 페이지를 만들고 있습니다.현재 문제는 사용자가 "add Like" 또는 "subtract Like" 메서드를 누를 때마다 현재 클릭 중인 댓글뿐만 아니라 모든 코멘트가 업데이트된다는 것입니다.
스토어:
export const state = () => ({
comments: [
{
id: 1,
likes: 0,
name: 'amyrobson',
img: '/img/avatars/image-amyrobson.png',
post: `Impressive! Though it seems the drag feature could be improved.
But overall it looks incredible. You've nailed the design and the
responsiveness at various breakpoints works really well.`,
},
],
})
export const mutations = {
pushComment(state, comment) {
state.comments.push(comment)
},
addLikes(state) {
state.comments.forEach((element) => element.likes++)
},
subtractLikes(state) {
state.comments.forEach((element) => element.likes--)
},
}
컴포넌트:
<button @click="addLike">
<img src="/img/icon-plus.svg" />
</button>
<p class="py-3 text-primaryBlue">{{ comment.likes }}</p>
<button
@click="subtractLike">
<img src="/img/icon-minus.svg" />
</button>
<script>
export default {
data() {
return {
reply: false,
}
},
},
methods: {
addLike() {
this.$store.commit('comments/addLikes')
},
subtractLike() {
this.$store.commit('comments/subtractLikes')
},
},
}
</script>
아이디와 상관없이 모든 댓글에 대해 좋아요를 늘리기 때문입니다.특정 코멘트의 링크를 증가시키려면 코멘트를 식별하는 ID를 전달해야 합니다.이 식별자는 고유해야 합니다.이 경우, 이 식별자는id
필드는 고유합니다.
다음으로 컴포넌트에서 다음 정보 비트(식별자)로 변환을 커밋해야 합니다.
<button @click="addLike(comment.id)">
<img src="/img/icon-plus.svg" />
</button>
<p class="py-3 text-primaryBlue">{{ comment.likes }}</p>
<button @click="subtractLike(comment.id)">
<img src="/img/icon-minus.svg" />
</button>
<script>
export default {
data() {
return {
reply: false,
}
},
},
methods: {
addLike(id) {
this.$store.commit('comments/addLikes', id)
},
subtractLike(id) {
this.$store.commit('comments/subtractLikes', id)
},
},
}
</script>
그런 다음 해당 식별자를 포함하도록 커밋 정의를 업데이트해야 합니다.이 식별자를 사용하여 다음 코멘트를 찾습니다.like
증가/증가할 속성:
addLikes(state, id) {
const foundComment = state.comments.find(comment => comment.id === id);
if (foundComment) foundCommment.likes++;
},
subtractLikes(state, id) {
const foundComment = state.comments.find(comment => comment.id === id);
if (foundComment) foundCommment.likes--;
},
p/s: 어레이 내의 오브젝트는 참조에 의한 것임을 기억하십시오.foundComment
에서의 원래 코멘트 오브젝트에 대한 참조일 뿐입니다.state.comments
직접 변환할 수 있습니다.
언급URL : https://stackoverflow.com/questions/70685386/vuex-store-updating-all-instances-i-only-want-current-instance-updated
'programing' 카테고리의 다른 글
HTML 텍스트 입력은 숫자 입력만 허용 (0) | 2022.11.26 |
---|---|
MariaDB 10.1.21 Galera 클러스터가 "Cannot create test file" / datadir confusion" 오류와 함께 시작되지 않음 (0) | 2022.11.17 |
Python에서 단일 언더스코어 "_" 변수의 목적은 무엇입니까? (0) | 2022.11.17 |
Python3:ImportError: 모듈 다중 처리에서 값을 사용할 때 '_ctypes'라는 이름의 모듈이 없습니다. (0) | 2022.11.17 |
목록의 목록을 바꿉니다. (0) | 2022.11.17 |