next.js
์localStorage
๋ฅผ ์ด์ฉํ์ต๋๋ค.
์ฒ์์ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์ ๋๋ ๋ก๊ทธ์ธํ ์ ์ ๊ฐ ํน์ ์ํ์ ํ์ด์ง์ ๋ค์ด๊ฐ์ ๊ฒฝ์ฐ๋ง๋ค DB
์ ๊ธฐ๋ก ๋ฐ ์
๋ฐ์ดํธํด์ ์ต๊ทผ์ ์ ๊ทผํ ์ํ์ด ๋ฌด์์ธ์ง ์์๋ด๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๋ฉด ๋ ๊ฒ์ผ๋ก ์๊ฐํ์ต๋๋ค.
๊ทธ๋์ ์ถ๊ฐํ ์ฝ๋๊ฐ ๋ง๊ณ ์๊ฐ์ด ์ข ๊ฑธ๋ฆด๊ฑฐ๋ผ๊ณ ์๊ฐํด์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ตฌํํ๊ณ ๋ง์ง๋ง์ ๊ตฌํํ๋ ค๊ณ ๋ฏธ๋ค๋จ๋ ๊ธฐ๋ฅ์
๋๋ค.
ํ์ง๋ง ๋ง์ ๊ตฌํํ๋ ค๊ณ ์ฐพ์๋ณด๋ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ์ต๋๋ค.
๋ฐ๋ก localStorage
๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ๊ตณ์ด DB
์ ์ ์ฅํ ๋งํผ์ ์ ๋ณด๋ ์๋๊ณ , ๋
ธ์ถ๋์ด๋ ํฌ๊ฒ ์๊ด์๊ณ , ์ญ์ ๋์ด๋ ์๊ด์๋ ์ ๋ณด๋ฉด์, ํฐ ์ฉ๋์ ์ฐจ์งํ์ง ์๊ธฐ ๋๋ฌธ์ localStorage
or sessionStorage
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋๊ผ์ต๋๋ค.
์ผ๋จ localStorage
์ ๋ฃ์ ๊ฐ์ ์๋ณ์, ๋ํ ์ด๋ฏธ์ง ๊ฒฝ๋ก, ์ด๋ฆ 3๊ฐ์ง๋ก ์ ํ๊ณ , ์ด๋ฆ์ watched
์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ๋ดค๋ ์ํ์ด๋ผ๋ฉด ์์๋ง ๋ฐ๊พธ๊ณ , ์๋ก ๋ณธ ์ํ์ด๋ผ๋ฉด ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ์ต๋๋ค.
localStorage
์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ก String
์ผ๋ก ๋ณ๊ฒฝ์์ผ์ ๋ฃ๊ธฐ ๋๋ฌธ์ JSON.stringify()
๋ฅผ ์ฌ์ฉํด์ฃผ์ง ์์ผ๋ฉด [Object]
๊ฐ์ ํ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.JSON.stringify()
์ JSON.parse()
๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.export type RecentProduct = {
idx: number;
photo: string;
name: string;
};
useEffect(() => {
if (!product) return;
const previousWatched: RecentProduct[] = JSON.parse(
localStorage.getItem("watched") || "[]"
);
if (!Array.isArray(previousWatched)) return;
let currentWatched: RecentProduct[] = [];
const targetIndex = previousWatched.findIndex(
(watched) => watched.idx === product.idx
);
// ์ฒ์ ๋ณด๋ ์ํ์ด๋ผ๋ฉด
if (targetIndex === -1) {
const { idx, photo, name, ...rest } = product;
currentWatched = [{ idx, photo, name }, ...previousWatched];
}
// ์ต๊ทผ์ ๋ณธ์ ์ด ์๋ ์ํ์ด๋ผ๋ฉด
else {
const target = previousWatched.splice(targetIndex, 1);
currentWatched = [...target, ...previousWatched];
}
// ๋ชฉ๋ก์ด 10๊ฐ๊ฐ ๋์ผ๋ฉด ์๋ฅด๊ธฐ
if (currentWatched.length > 10) currentWatched.pop();
localStorage.setItem("watched", JSON.stringify(currentWatched));
}, [product]);