inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Typescript with Vue 실전 프로젝트

Vuex Store 개발하기

removeItem 에서 element 가 하나 남았을 때 삭제가 되지 않는 문제

369

infi_duk

작성한 질문수 1

0

안녕하세요!!

먼저 좋은 강의 올려주셔서 감사하다는 말씀 드리고 싶습니다!!!!! 공부하는 데 정말 많은 도움을 받고 있습니다 ㅎㅎ

강의 보면서 프로젝트 진행하던 중, TODO Item 항목을 삭제하는 부분에서 문제가 생겨 질문드립니다..!!

다른 경우는 삭제가 잘 되는데, 배열 안의 원소가 하나 남았을 때는 삭제가 되지 않았습니다 ㅠㅠ

return state.todoList.splice(id, 1);

그래서 이 부분을 아래와 같이 index 를 찾아서 splice 하도록 수정해 봤습니다.

return state.todoList.splice(state.todoList.findIndex(item => item.id === id), 1);

그랬더니 잘 동작하긴 하는데.. 혹시 제가 소스를 잘못 작성한건지.. 이렇게 고쳐서 진행해도 되는지.. 여쭤보려고 질문 드립니다 ㅠㅠㅠ

감사합니다!!

vuejs

답변 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

infi_duk

친절한 답변 정말 감사합니다!!!!

답변해주신 내용 중, 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