4.1.2 배열의 불변성을 지키는 방법
리액트에서 배열 타입의 상태를 다룰 때에도 불변성을 지켜야 합니다. 우선 불변성을 지키지 않으면서 배열을 수정하는 코드들을 예로 한번 볼까요?
const numbers = [0, 1, 2, 3]; // 추가 numbers. (4); // 수정 numbers[0] = 10; // 삭제 number. (0, 1);
이 코드는 모두 배열을 직접 수정합니다. 리액트에서 상태를 관리할 때는 이와 같이 코드를 작성하면 안 됩니다. 그 대신 배열의 내장 함수들을 활용해 새로운 배열을 생성하는 방식으로 배열의 상태를 업데이트해야 합니다.
4.1.2.1 새로운 항목 추가하기
불변성을 유지하면서 배열에 새로운 항목을 추가하는 방법은 두 가지가 있습니다. 첫 번째 방법은 spread 연산자를 사용하는 것입니다.
const numbers = [0, 1, 2, 3]; const nextNumbers = [...numbers, 4];
Note ≡
spread 연산자는 객체뿐만 아니라 배열에서도 사용할 수 있습니다. 배열에서 spread 연산자를 사용하면 새로 만드는 배열에 원하는 배열을 펼칠 수 있습니다. 예를 들어, 앞의 코드에서 nextNumbers의 결과물은 [1, 2, 3, 4]가 됩니다.
spread 연산자는 배열에서 여러 번 사용할 수도 있습니다.
const nextNumbers [ numbers, 4, numbers];
이 코드에서 nextNumbers의 결과는 [0, 1, 2, 3, 4, 0, 1, 2, 3]이 됩니다.