- [팀] 겸상 - Vue.js에서 배열에 배열을 대입했는데 서로 바인딩된 것 처럼 작동!? computed와 Spread operator를 이용해 해결!2022년 07월 13일 09시 55분 43초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
숟갈을 선택하고 빼는 화면을 구현해야 하는 데 이미 선택했던 숟갈을 취소하는 기능이 포함되어야 한다. 이게 상당히 상그러운 일이었다. 이 기능을 구현하기 위해서 "지금 선택할 숟갈"과 "이미 확정되었던 숟갈"을 각각 구분하여 관리할 필요가 있었다. 그래서 "selectedSpoons, fixedSpoons"라는 배열 프로퍼티를 각각 두었다.
화면이 최초 렌더링 될 때 이미 확정되었던 숟갈 요소를 selectedSpoons에 넣는 과정을 두었다(this.selectedSpoons = this.fixedSpoons;). 그 이유는 [그림 1]과 같이 "함께할 숟갈"에 표시하고 정해진 인원수 관리(3인)를 용이하게 하기 위해서였다. 그런데 여기에서 문제가 발생했다.
data() { return { ... selectedSpoons: [], // 현재 선택한 숟갈 fixedSpoons: [], // 신청한 숟갈 중 이미 선택된 숟갈 ... }; }, ... methods: { ... async getBabsangSpoons() { ... this.selectedSpoons = this.fixedSpoons; ... }, ... }
위 코드에서 "this.selectedSpoons = this.fixedSpoons;"가 문제라는 것을-console.log를 찍어가며 추적하다가 비로소-알게 되었다. "지금 선택할 숟갈"이 추가되면 selectedSpoons 배열에 추가되는데 문제는 fixedSpoons 배열의 값도 selectedSpoons와 동일하게 변경되어 문제가 된 것이다. "this.selectedSpoons = this.fixedSpoons;"은 두 배열이 서로 동기화되어 작동되는 것으로 보인다.
해당 코드 부분을 다음과 같이 수정하여 문제를 해결하였다. computed에 mixSpoons라는 프로퍼티를 선언하여 selectedSpoons와 fixedSpoons와 완전히 분리한 것이다.
computed: { ... mixSpoons: function () { return [...this.fixedSpoons, ...this.selectedSpoons]; }, },
728x90반응형'프로젝트 > [팀] 겸상 - 혼밥 매칭' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글