코드: useLocalStorage.js
jsx
코드 복사
import { useState, useEffect } from "react";
function useLocalStorage(key, initialValue) {
// state를 초기화하면서 로컬 스토리지 값을 읽어옴
const [storedValue, setStoredValue] = useState(() => {
try {
// 로컬 스토리지에서 값 가져오기
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
} catch (error) {
console.error("로컬 스토리지에서 데이터를 가져오는 중 오류 발생", error);
return initialValue;
}
});
// 로컬 스토리지에 데이터를 저장하는 함수
const setValue = (value) => {
try {
const valueToStore = value instanceof Function ? value(storedValue) : value;
setStoredValue(valueToStore);
window.localStorage.setItem(key, JSON.stringify(valueToStore));
} catch (error) {
console.error("로컬 스토리지에 데이터를 저장하는 중 오류 발생", error);
}
};
return [storedValue, setValue];
}
export default useLocalStorage;
2. useLocalStorage 훅 사용 예시
이제 이 커스텀 훅을 활용해 로컬 스토리지와 상태 관리를 쉽게 할 수 있습니다.
코드: ExampleComponent.js
jsx
코드 복사
import React from "react";
import useLocalStorage from "./useLocalStorage";
function ExampleComponent() {
// useLocalStorage를 사용하여 'name' 키로 데이터를 관리
const [name, setName] = useLocalStorage("name", "Guest");
return (
<div>
<h1>안녕하세요, {name}님!</h1>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="이름을 입력하세요"
/>
</div>
);
}
export default ExampleComponent;
3. 코드 설명
useLocalStorage 훅
key와 initialValue를 받아 로컬 스토리지의 값을 읽고 초기화합니다.
값이 변경될 때 로컬 스토리지에 데이터를 저장합니다.
재사용성
다양한 컴포넌트에서 이 훅을 사용하여 로컬 스토리지를 간편하게 다룰 수 있습니다.
사용 편의성
기존 useState와 비슷한 형태로 사용할 수 있어 개발자가 직관적으로 사용 가능합니다.
4. 출력 결과
처음 페이지를 열면 로컬 스토리지에 "Guest"가 저장되고, 입력 필드를 통해 값을 변경하면 로컬 스토리지와 화면이 동시에 업데이트됩니다.
실행 예시
plaintext
코드 복사
안녕하세요, Guest님!
(입력 필드에 'John' 입력)
=> 로컬 스토리지에 'John'이 저장됨
=> 화면에 "안녕하세요, John님!" 표시
5. 장점
반복되는 로직(JSON.parse, JSON.stringify, 에러 처리 등)을 커스텀 훅에 통합해 코드 중복을 줄일 수 있습니다.
컴포넌트의 상태 관리와 로직이 분리되어 컴포넌트 코드가 더 클린해집니다.
유지 보수와 테스트가 용이합니다.