인프런 커뮤니티 질문&답변

tv태정님의 프로필 이미지

작성한 질문수

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

이미지 지우기[삭제 예정]

Images와 [...Images]

작성

·

204

0

Images는 이미 배열인데 let newImages = Images 라고 하지 않고 let newImages = [...Images] 라고 하는 이유는 뭔가요??

답변 3

1

전개연산자는 [], {}, ()여기에서만 사용 가능해서 [...Images]를 하신 것 같습니다 

0

newImages = Images 이렇게 원본 배열을 그대로 넣어버리면 newImages는 Images가 가리키는 값의 위치를 가리키게 됩니다.

그러면 newImages의 요소를 삭제했을 때, 같은 위치를 참조하는 원본 배열(Images)도 변경되어버립니다.

원본인 Images를 직접 잘라버리는 건 불변성 법칙에 위배되기 때문에 newImages라는 변수를 만들고,

spread operator로 Images 배열 안에 있는 요소들을 newImages 배열 안에 그대로 넣어줍니다.

그래서 내용은 같지만 완전히 새로운 배열을 만들어주는 겁니다.

이렇게 완전히 새로운 배열에서 편집을 한 뒤에, setImages로 Images 상태를 변경시켜줍니다.

0

저도 잘모르지만 images는 state라서 setImages로만 변경이 가능한것 같네요

let newImages = Images 이렇게 하면 

newImages는 Images에 대한 참조변수가 되기에

let newImages = [...Images] 를 해서

Images를 복사하신것 같습니다.

tv태정님의 프로필 이미지

작성한 질문수

질문하기