import { useState } from "react";
export default function Home() {
let value;
value = localStorage.getItem("pw") || "";
const [pw, setPw] = useState(value);
const saveToLocalStorage = (e) => {
e.preventDefault();
localStorage.setItem("password", pw);
};
return (
<div>
<label htmlFor="pw">Write your password here.</label>
<form onSubmit={saveToLocalStorage}>
<input
id="pw"
type="password"
value={pw}
onChange={(e) => setPw(e.target.value)}
/>
<button type="submit"></button>
</form>
</div>
);
}
위와 같이 비밀번호를 localStorage에 저장하는 코드를 Next.js 프로젝트에서 작성했다고 가정해보자.
그리고 이 코드를 실행시키면,
ReferenceError: localStorage is not defined
이러한 에러가 발생한다.
window.localStorage
에 접근할 수 없다.
typeof window !== 'undefined'
if (typeof window !== "undefined") {
// localStorage 관련 작업 수행 코드
value = localStorage.getItem("pw") || "";
}
typeof의 확장; class로 만들어서 사용하기
class LocalStorage {
constructor() {}
static setItem(key: string, item: string) {
if (typeof window !== "undefined") {
localStorage.setItem(key, item);
}
}
static getItem(key: string) {
if (typeof window !== "undefined") {
return localStorage.getItem(key);
}
return null;
}
static removeItem(key: string) {
if (typeof window !== "undefined") {
localStorage.removeItem(key);
}
}
}
export default LocalStorage;
// 사용방법
import LocalStorage from "../";
const saveToLocalStorage = (e) => {
if (!e.target.value) return;
e.preventDefault();
LocalStorage.setItem("password", pw);
};
try-catch
문 사용하기
try {
value = localStorage.getItem("pw") || "";
} catch (error) {}
🌟
useEffect
👩🏫 위의 방식들보다 더 "React"스러운 해결책입니다.
import { useEffect } from "react";
useEffect(() => {
// localStorage 관련 작업 수행 코드
value = localStorage.getItem("pw") || "";
}, []);