inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"

반응형 기초 (Reactivity)

reactive( array ) 선언 후 array에 filter를 사용하면 반응이 안되요

1228

JM_LEE

작성한 질문수 1

1

let itemsReactive = reactive([
  { id: 1, name: '딸기1', check: true },
  { id: 2, name: '딸기2', check: true },
  { id: 3, name: '딸기3', check: true },
  { id: 4, name: '딸기4', check: true },
]);

const deleteItemReactive = id => {
  let tempItems = itemsReactive.filter(item => item.id !== id);
  itemsReactive = tempItems;
};

const updateItemReactive = id => {
  let tempItem = itemsReactive.find(item => item.id === id);
  tempItem.check = !tempItem.check;
};

위 코드에서 updateItemReactive 함수는 check값이 true, false 바뀌는 것을 확인할 수 있는데

deleteItemReactive 함수를 사용하면 반응이 안되고 있습니다.

vuejs devtools로 확인해보니까 바뀌기 전에는 ItemsReactive = Reactive이고 배열 안에 요소들은 Object인데

deleteItemReactive 함수를 실행하면

ItemsReactive = Array 이고 배열 안 요소들이 Reactive로 바뀌는 것을 확인했습니다. 왜 이렇게 나오는지 모르겠습니다.

 

 

vuejs

답변 1

0

짐코딩

안녕하세요 :)

deleteItemReact 함수 호출시 반응이 안되는 이유는 itemsReactive = tempItems; 값(메모리) 자체를 변경하기 때문입니다.

만약 배열의 전체값을 변경하고 싶다면 아래 처럼 ref함수를 사용하여 문제를 해결할 수 있습니다.

let itemsReactive = ref([
  { id: 1, name: '딸기1', check: true },
  { id: 2, name: '딸기2', check: true },
  { id: 3, name: '딸기3', check: true },
  { id: 4, name: '딸기4', check: true },
]);

const deleteItemReactive = (id) => {
  let tempItems = itemsReactive.value.filter((item) => item.id !== id);
  itemsReactive.value = tempItems;
};

const updateItemReactive = (id) => {
  let tempItem = itemsReactive.value.find((item) => item.id === id);
  tempItem.check = !tempItem.check;
};

관련하여 설명은 해당 강의 [반응형 기초 강의 5분 31초] 쯤 보시면 같은 맥락이기 때문에 한번 보시는 것을 권장드려요.

이렇게 반응이 안되는 이유는 자바스크립트 언어 특성상 변수에 새로운 값이 할당 하기 때문이에요.
(참고 Call By Value & Call By Reference)

감사합니다 🙂

0

휘리릭

안녕하세요 글쓰신분이랑 비슷한 생각을 해서 질문드립니다! 그러면 반영이 되지 않는 이유가 ItemsReactive가 가지고 있던 reactive 속성들이 새로운 데이터에 의해 덮어진거라고 생각을 하는게 맞는걸까요..?

props로 함수를 전달했을 때의 질문입니다!

0

640

1

eslint 세팅 질문 드립니다.

0

1720

2

컴포넌트 이벤트 전파 관련 질문입니다

0

503

1

app-level의 provide한 값을 새로고침시 정상적으로 inject하지 못함.

1

531

1

this.$refs에 값이 들어가는 시점이 언제인가요?

0

836

1

npm run dev 설치중

0

626

2

reactive vs ref... 굳이 reactive를 사용하는 이유가 뭔가요?

1

1951

1

dummy api axios 호출시 cors 에러

0

539

1

19:17 emit 관련 질문

0

570

1

reactive로 선언한 반응형 객체 자체를 바꿨는데 watch 콜백함수가 실행이 안되요

0

573

1

자식 컴포넌트에 input 태그, checkbox 같은 form 태그가 없으면 v-model 안 쓰는건가요?

0

582

1

template내 자바스크립트 표현식 평가 시점은 언제인가요?

0

352

1

App.vue 물결 표시 제거 방법

0

378

1

v-if 질문입니다!

0

565

1

ref vs reactive vs shallowRef

0

654

1

script 태그는 컴포넌트를 처음 가져올때 한번만 실행된다는 게 잘 이해가 안됩니다

1

671

1

이벤트 핸들러로 왜 일반 함수로는 작동이 안 되나요? + console.log도 인식이 안되요

0

348

1

Vue3 Composition API - computed

0

461

1

setup 함수내 문자열 관련 질문입니다.

0

350

2

v-on:click ="" 질문입니다

0

352

1

v-on:click="" 질문입니다

0

239

1

v-for에서 style을 사용하려 할 때

0

377

1

reactive와 computed 차이 질문

0

1113

1

emits사용 이유

1

454

1