0Pricing
React Academy · 강의

localStorage와 상태 동기화하기

React 상태와 localStorage를 양방향으로 동기화하는 useLocalStorage 사용자 지정 훅을 만듭니다.

localStorage와 상태 동기화하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

순진한 접근 방식은 동기화되지 않습니다

처음에는 한곳에서 localStorage를 읽고 다른 곳에서 쓰려고 하지만, 두 작업이 서로 어긋날 수 있습니다. 저장을 잊은 상태 업데이트나 상태에 반영되지 않은 저장 값은 버그를 일으킵니다.

리액트 상태와 저장소를 항상 일치시키는 단일 기준이 필요합니다.

useLocalStorage 사용자 정의 훅

깔끔한 해결책은 useLocalStorage 훅으로 useState를 감싸 변경 사항을 자동으로 저장하는 것입니다. 이 훅은 useState와 마찬가지로 값과 설정 함수를 반환합니다.

사용하는 쪽에서는 일반 상태와 똑같이 사용하면서 별도의 작업 없이 영속성을 얻을 수 있습니다.

지연 초기화 함수

localStorage 읽기는 동기 작업이므로 모든 렌더링마다 수행해서는 안 됩니다. useState에 함수, 즉 지연 초기화 함수를 전달하면 마운트될 때 한 번만 읽습니다.

해당 함수 내부에서 저장된 값을 파싱하거나 제공된 기본값을 반환합니다.

지연 초기화가 중요한 이유

초기 상태를 인수로 직접 계산하면 해당 표현식은 첫 번째 렌더링 이후 무시되는데도 모든 렌더링마다 실행됩니다. 함수를 사용하면 리액트가 한 번만 호출합니다.

localStorage를 읽을 때는 렌더링마다 반복되는 동기식 메인 스레드 작업을 방지할 수 있습니다.

useEffect를 통한 동기화

업데이트를 저장하려면 값이 변경될 때마다 실행되는 useEffect를 추가하고 localStorage.setItem(key, JSON.stringify(value))를 호출하십시오.

의존성 배열에 값을 넣으면 모든 상태 변경 사항이 자동으로 저장소에 기록됩니다.

함수형 업데이트로 오래된 클로저 방지

이전 값을 기반으로 설정할 때는 함수형 형식인 setValue(prev => prev + 1)을 사용하십시오. 이렇게 하면 캡처된 오래된 값이 기록되는 오래된 클로저 문제를 방지할 수 있습니다.

오래된 상태 스냅샷을 캡처할 수 있는 이벤트 처리기와 효과 내부에서는 특히 중요합니다.

저장된 널 값 처리

키가 존재하지 않을 때 getItem은 null을 반환합니다. 초기화 함수는 이를 감지하고 널을 파싱하려 하지 말고 기본값으로 대체해야 합니다.

stored != null ? JSON.parse(stored) : defaultValue와 같은 검사를 사용하면 첫 방문도 자연스럽게 처리할 수 있습니다.

TypeScript 제네릭

TypeScript에서는 훅을 제네릭으로 만들 수 있습니다. function useLocalStorage<T>(key: string, initial: T)와 같이 작성하면 값의 유형이 유지되어 사용하는 쪽에서 완전한 유형 안전성을 얻을 수 있습니다.

반환되는 튜플은 [T, Dispatch<SetStateAction<T>>]로 유형이 지정되며, useState와 일치합니다.

저장된 데이터 버전 관리

시간이 지나면 데이터 형태가 변경되고, 오래된 저장 값이 새로운 코드를 망가뜨릴 수 있습니다. 데이터와 함께 버전 키를 저장하면 오래된 형식을 감지할 수 있습니다.

예를 들어 { version: 2, data }를 저장하고 읽을 때 버전을 비교하십시오.

버전 불일치 시 삭제

저장된 버전이 현재 버전과 일치하지 않으면 해당 값을 신뢰하지 말고 폐기하거나 이전하십시오. 가장 간단한 전략은 오래된 항목을 제거하고 기본값으로 대체하는 것입니다.

이렇게 하면 앱의 이전 버전에서 기록한 데이터로 인해 충돌이 발생하는 것을 방지할 수 있습니다.

훅 완성하기

완전한 useLocalStorage는 안전하게 읽고 파싱하는 지연 초기화 함수, 함수형 업데이트를 지원하는 설정 함수, 버전 관리를 적용해 저장소에 기록하는 useEffect를 결합합니다.

그 결과 새로 고침 후에도 유지되는 useState의 대체물로 그대로 바꾸어 사용할 수 있습니다.

빠른 확인

상태 초기화에 대한 이해를 확인해 보십시오.

복습

지연 초기화 함수를 사용하고, useEffect를 통해 변경 사항을 저장하며, 오래된 클로저를 방지하기 위해 함수형 업데이트를 사용하고, 널 값을 처리하는 useLocalStorage 훅을 만드는 방법을 배웠습니다.

또한 TypeScript 제네릭과 버전 관리를 사용해 오래된 데이터를 안전하게 삭제하는 방법도 살펴보았습니다.

자주 묻는 질문

“localStorage와 상태 동기화하기” 강의는 무료인가요?

네 — “localStorage와 상태 동기화하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“localStorage와 상태 동기화하기”에서 뭘 배우나요?

React 상태와 localStorage를 양방향으로 동기화하는 useLocalStorage 사용자 지정 훅을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“localStorage와 상태 동기화하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. React에서 localStorage 읽기 및 쓰기
  2. localStorage와 상태 동기화하기
  3. 탭 간 저장소 이벤트 처리하기
  4. sessionStorage, IndexedDB와 적절한 API 선택하기
← React Academy(으)로 돌아가기