ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Zustand와 Immer의 결합
    코딩공부 2024. 7. 8. 21:50
    immer 설치:yarn add immer

     

    • (2)-1. 직접 중첩된 상태를 업데이트 했을 때의 문제점배열이나 객체의 중첩된 상태를 업데이트할 때 불변성을 유지하지 않으면 상태 반영이 제대로 이루어지지 않아, 예상치 못한 오류가 발생할 수 있습니다. 다음 예제를 통해 중첩된 상태를 업데이트할 때 발생하는 문제를 살펴봅시다! 
    • Zustand의 간편한 상태 업데이트 방식은 깊은 중첩 구조를 가지는 상태를 업데이트할 때 문제가 발생할 수 있습니다.

    Mutable 메서드

    ❗ 불변성 유지 안됨

     

    Mutable 메서드는 원본 데이터를 직접 수정하여 변경된 데이터를 반환합니다. 이 방법은 간단하지만, 상태 변화 추적이 어려워져 버그 발생 가능성이 높아집니다.

    Immutable 메서드

     ✅ 불변성 유지 됨

     

    원본 데이터를 변경하지 않고, 수정된 새로운 데이터를 반환합니다. 이를 통해 불변성을 유지하며, 상태 관리가 쉬워지고 예측 가능한 코드 작성을 돕습니다.

                                     

     

                                                 

          순번                            특징                                         Mutable                                            Immutable

    1 배열 추가 push concat
    2 배열 제거 pop slice
    3 배열 앞에 추가 unshift [newItem, ...arr]
    4 배열 앞에서 제거 shift slice(1)
    5 배열의 요소 변경 splice slice + concat
    6 배열 정렬 sort Array.from + sort
    7 배열 반전 reverse slice().reverse()
    8 배열 요소 제거 splice filter
    9 객체 속성 추가 직접 할당 Object.assign
    10 객체 속성 제거 delete Object.keys + reduce
    11 객체 속성 변경 직접 할당 Object.assign
    12 문자열 병합 직접 할당 concat

    리스트가 추가 / 수정 되더라도 다른 요소에 의해 리렌더링이 일어나지 않는 한, UI에 반영이 안돼요 🙅

     

     

    • (2)-2. immer를 이용해 해결하는 경우
      • Immer는 JavaScript에서 상태를 쉽게 변경할 수 있게 해주는 라이브러리입니다. 원본 데이터를 변경하지 않고도 마치 직접 수정하는 것처럼 코드를 작성할 수 있으며, Immer가 자동으로 불변성을 유지한 새 상태를 만들어줍니다.
      • 우리가 위에서 겪은 문제를 해결해 줄 key를 가지고 있는 라이브러리에요!

     

    (3) 기타 유용한 패턴

    • (3)-1. 선택적 상태 구독
    • 상태의 특정 부분만 구독하여 성능 최적화 할 수 있어요! 사실, 우리는 이미 선택적으로 상태를 구독해 오고 있었어요 
    •  
    • (3)-2. 미들웨어 사용
    •   persist, devtools는 zustand 내장이므로, 별도 설치할 필요가 없습니다 
    • 로깅, 퍼시스턴스 등을 사용하면, 다양한 기능을 추가할 수 있어요. 우리는 persist를 이용해서 새로고침을 하더라도 데이터가 남아있도록 해볼게요
    • 1. import { persist } from "zustand/middleware";
    • 2. { name: "todos-storage", // 저장소 이름을 설정해요! // getStorage: () => sessionStorage, // localStorage가 아닌 곳에 저정하고 싶다면! }
    이렇게 하면, 새로고침을 하더라도 localStorage에서 데이터를 관리하기 때문에 지속성을 유지할 수 있어요.

     

    '코딩공부' 카테고리의 다른 글

    최종 프로젝트 2024/07/18  (0) 2024.07.18
    최종 프로젝트 2024/07/17  (0) 2024.07.17
    Zustand  (0) 2024.07.08
    supabase type 설정 (next.js)  (0) 2024.07.05
    supabase install 설정 (next.js)  (0) 2024.07.05
Designed by Tistory.