defaultValue
를 통해 값이 초기화될 때, 해당 값이 세션 스토리지에 저장되지 않는 문제가 있습니다.set
함수가 호출되지 않더라도, defaultValue
로 초기화된 값이 세션 스토리지에 저장되어야 합니다.아래와 같은 코드를 사용했을 때 문제가 발생합니다:
const [state, set] = useStorageState('dummy-key', { defaultValue: 'foo' });
getValue
함수에 아래 코드를 추가하여 문제를 해결할 수 있습니다:
const getValue = useCallback(<T>() => {
const data = storage.get(key);
if (data == null) {
return defaultValue;
}
try {
const result = JSON.parse(data);
if (result == null) {
storage.set(key, JSON.stringify(defaultValue)); // 이 라인 추가
return defaultValue;
}
return result as T;
} catch {
// NOTE: JSON 객체가 아닌 경우
return defaultValue;
}
}, [defaultValue, key, storage]);
위 템플릿을 복사하여 GitHub Issue 작성 시 활용하세요.
출처: Toss/slash