removeItem 에서 element 가 하나 남았을 때 삭제가 되지 않는 문제
369
작성한 질문수 1
안녕하세요!!
먼저 좋은 강의 올려주셔서 감사하다는 말씀 드리고 싶습니다!!!!! 공부하는 데 정말 많은 도움을 받고 있습니다 ㅎㅎ
강의 보면서 프로젝트 진행하던 중, TODO Item 항목을 삭제하는 부분에서 문제가 생겨 질문드립니다..!!
다른 경우는 삭제가 잘 되는데, 배열 안의 원소가 하나 남았을 때는 삭제가 되지 않았습니다 ㅠㅠ
return state.todoList.splice(id, 1);
그래서 이 부분을 아래와 같이 index 를 찾아서 splice 하도록 수정해 봤습니다.
return state.todoList.splice(state.todoList.findIndex(item => item.id === id), 1);
그랬더니 잘 동작하긴 하는데.. 혹시 제가 소스를 잘못 작성한건지.. 이렇게 고쳐서 진행해도 되는지.. 여쭤보려고 질문 드립니다 ㅠㅠㅠ
감사합니다!!
답변 2
1
안녕하세요!
일단 보내주신 코드는 올바른 접근 방법입니다.
보통 데이터에서 id는 해당 아이템의 고유한 값으로 설정되므로, findIndex를 사용하신것은 아주 휼륭한 판단이십니다.👍👍
(제가 예제로 코딩한 부분은 편의를 위해 일반적인 id와는 다르게 array상에서 아이템의 인덱스의 용도로 사용하였습니다.)
하지만 그 전에 왜 삭제가 되지 않는 버그가 있는 것 인지 확인해 보니,
ItemInput 컴포넌트에서 addItem 할 때, id 값을 설정하는 부분에서 문제가 있는것으로 보입니다. ㅠㅠ
addItem() {
this.$store.commit('addItem', {
id: this.todoList.length + 1,
title: this.title,
status: 'active',
});
}
코드와 같이 todolist 아이템 개수 + 1 = id 입니다.
그리고 이 id값은 스토어에서 removeItem, ChangeStatus에서 todolist Array의 특정 item을 찾는 인덱스 값이 됩니다.
여기서 포인트는 ⭐Array의 인덱스는 0부터 시작⭐한다는 것입니다!!
따라서 영상 말미에 새로 추가한 아이템의 id는 기존 아이템 개수인 2개에 1을 더해 3이 되고,
todolist Array의 세번째에 추가되고 인덱스는 2가 됩니다.
ex. [첫번째 아이템: 인덱스0, 두번째 아이템: 인덱스1, 새로 추가한 세번째 아이템 인덱스2]
id와 인덱스가 동일하지 않기때문에 이 추가된 아이템은 삭제가 되지 않습니다.
이에 따라 혼동을 드린 점 정말 죄송합니다 ㅠㅠ
빠른 시일내에 잘못 된 부분은 업데이트 될 수 있도록 하겠습니다.
다른 문의 사항이 있으시면 편하게 질문 게시판 남겨주세요!
0
친절한 답변 정말 감사합니다!!!!
답변해주신 내용 중, addItem 부분에 추가로 궁금한 점이 생겨 댓글로 질문 드립니다..!!
현재 소스 상으로 addItem 에서 id 는 todoList length (todoList 원소 개수) 에 + 1 한 값을 할당하는데
만약 todoList array 에 3개의 원소가 있고 (샘플 데이터 기준 id 0, 1, 2),
세 번째 원소만 남기고 삭제했다고 가정한 상태에서 (id 2)
새로운 todo Item 을 추가하면 id 값이 1 + 1 을 한 값인 2 로 들어가서 key 가 중복되는 게 아닌가 하는 생각이 들어서 질문 드립니다.. ㅎㅎㅠㅠㅠㅠ
감사합니다!!!
소스 공유좀 해주세요
0
251
0
target null 에러뜨시는 분들
0
329
0
라우터 구조잡기 소스
0
284
0
새로 추가한 인스턴스 상태 관리
0
245
0
App.vue의 $store
0
191
0
npm run serve 에러
0
220
0
Cannot find module '@/components/message.vue' or its corresponding type declarations.
0
1150
2
prop !
0
193
0
@ MutationActions
0
177
0
mapGetters 내 정의가 안되요 ㅠ
0
259
0
안녕하세요! @Prop() readonly id(느낌표):string; 에서 !(느낌표) 를 찍는 이유가 궁금합니다 :)
0
224
0
store 사용 방법 관련 질문입니다.
0
239
1
moduleA.store.ts내에서 RootState가 하는일은 무엇인가요?
0
178
0
Property '$route' does not exist on type 'ItemList'. 이 에러는 무엇인가요..?
0
861
1
Cannot find module '@/components/message.vue'.
0
2869
6
@Action, @Mutation 등으로 지정된 변수의 타입
0
227
1
안녕하세요. 강의 잘 들었습니다.
0
166
0
Axios Post보낼때 어떤 식으로 구성하는게 좋을까요?
0
660
1
안녕하세요! v-for(v-bind:key), slice() 관련 질문이 있어요!
2
666
3
에러 표시 질문이요!
1
402
3
vuex-module-decorators 보다 오리지널 모듈 형태를 선호하시는 이유가 무엇이신가요?
1
377
2
안녕하세요. 초기 셋팅시 질문있습니다.
1
294
2
안녕하세요! Vuex, actions 질문이 있습니다.
1
302
2
클래스 속성 에러는 무엇인가요??
1
171
1





