react 스터디에서 리액트를 다루는 기술이라는 책을 선정했고 이 책을 읽고 배운 것을 바탕으로 작성되었다.
state
가 변경되었는지 감지하기 위해 react는 얕은 비교를 수행한다.💡 얕은 비교
실제 내부 값을 비교하는 것이 아니라 메모리 주소값(참조값)을 비교하는 것을 말한다. 얕은 비교는 계산 리소스를 줄여주기 때문에 효율적으로state
를 업데이트 할 수 있다.
state
의 참조값을 바꾸지 않고 단순히 내부 프로퍼티의 값만 바꾸었다면 우리는 state
가 바뀌었다고 생각히지만 리액트는 이전의 state
와 같다고 인식하여 컴포넌트를 리렌더링하지 않는다.💡 현재 state
의 불변성을 지키면서 값을 업데이트해야 한다. (특히, 참조 자료형의 경우)
💡 새로운 참조값을 만들기 위해 사본을 만들고 그 사본에 값을 업데이트한 후, 그 사본의 상태를 setter 함수
를 통해 업데이트한다.
immer
라이브러리를 사용하여 구조가 복잡한 객체도 매우 쉽고 짧은 코드를 사용하여 불변성을 유지하면서 업데이트해줄 수 있다.produce
함수는 두 개의 인자를 받는다. 첫번째 인자는 수정하고 싶은 상태이고, 두번째 인자는 상태를 떻게 업데이트할지 정의하는 함수이다.produce
함수가 불변성 유지를 대신해주면서 새로운 상태를 반환한다.push
, splice
등의 메서드를 이용해도 된다.import produce from "immer";
const nextState = produce(originalStsate, draft => {
// 바꾸고 싶은 값 바꾸기
})
produce
함수를 호출할 때, 첫 번째 인자가 함수 형태라면 업데이트 함수를 반환한다.immer
속성과 useState
의 함수형 업데이트를 함께 활용할 수 있다.