reactive( array ) 선언 후 array에 filter를 사용하면 반응이 안되요
1228
작성한 질문수 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로 바뀌는 것을 확인했습니다. 왜 이렇게 나오는지 모르겠습니다.
답변 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





