
์ค๋ฅ ์์
๋งค์์ ๋ง์ง๋ง ๋
๋งค ๋ฌ ๋ง์ง๋ง ๋ ์ ๊ธ์ด ์ ์จ์ง๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค

Home.js
const lastDay = new Date(
curDate.getFullYear(),
curDate.getMonth() + 1,
0
).getTime();
// ๋งค๋ฌ์ ๋ง์ง๋ง ๋ ์ ๊ตฌํด์ค
์ด ๋ถ๋ถ์ ์์ ํ์ด์ผ ํ๋ค.
0์ด ๋๋ฉด, ๋ง์ง๋ง ๋ ์ ์์ ์ด ์ค์ ์ด ๋๋ ๊ฒ.
์/ ๋ถ/ ์ด ๊น์ง ์ํฅ์ด ๋ฏธ์น๋ค๋ ๊ฒ์ ์์ง ๋ง์!
const lastDay = new Date(
curDate.getFullYear(),
curDate.getMonth() + 1,
0,
23,
59,
59
).getTime();
์ด๋ ๊ฒ ์์ ํด์ฃผ์๋๋ ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค


4์๋ ํ์ธ ใ
ใ
id ๊ฒน์นจ

์ผ๊ธฐ๋ฅผ ๊ณ์ ์ถ๊ฐํด ๋๊ฐ๋ ์ค, ์ด๋ฐ ์ค๋ฅ๋ฅผ ๋ง๋ฅ๋จ๋ ธ๋ค
react_devtools_backend.js:2655 Warning: Encountered two children with the same key, `1`.

์ด๋ ๊ฒ ๊ธ์ ์ถ๊ฐํด์ค ๋๋ง๋ค 0๋ถํฐ ์์ํด๋ฒ๋ ค์, id๊ฐ ๊ฒน์ณค๋ ๊ฒ์ด๋ค.
์ฝ์์ ๋ณด๋ฉด ์ ์ ์๋ฏ, id๊ฐ ๋ ๊ฐ๊ฐ ๊ฒน์น๋ค.
App.js
const dataId = useRef(0);
์ด๋ถ๋ถ ๋๋ฌธ์ด๋ฉฐ, useRef(6)์ผ๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด ํด๊ฒฐ์ด ๋๋ค.
์ฌ์ค ๋๋ฏธ๋ฐ์ดํฐ ์ธ ๋๋ง ๋์ค๋ ์ค๋ฅ๋๊น ๋์ค์ ์์จ ๊ฑฐ๋ผ๊ณ ์๊ฐํด์ ์ธ๊น ๋ง๊นํ๋๋ฐ,
๋์ค์ ์๋ฃ ์์ด ๋๋ฏธ๋ฐ์ดํฐ๋ก ์์ ํ
์คํธ๋ฅผ ํด๋ณผ ๋ ์์ง๋ง์์ผ ๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํด์ ์ถ๊ฐํด๋ณธ๋น.
์๋ก๊ณ ์นจ
Local Storage
์ฝ๋์คํ
์ด์ธ ์ด์ฐฝ๊ธฐ์, ๋๋ง์ ์๊ณ ๋ผ์คํ
์ด์ธ ๋ฅผ ๋ง๋ค์์๋๋ฐ
๊ทธ๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง ์ ์ฅ์ ๋ชปํด์ ์ดํ๋์ ์ ๋จน์๋ ๊ธฐ์ต์ด์๋ค..
๊ทธ๋๋ ๋๋ฆ ๋ฐ์ ํ๋ค๊ณ ์ด๋ ต์ง ์๊ฒ ์ฑ๊ณตํด๊ฐ์ง๊ณ ์ฐธ ์ธ์์ด ํ๋ ๋ค~ ์ถ์์
์ฐธ๊ณ : https://developer.mozilla.org/ko/docs/Web/API/Web_Storage_API
[LocalStorage]
์ฌ๊ธฐ์ ๋๋ reducer ํจ์๋ก ๋ชจ๋ ํ์๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์,
์ด reducer์์ newState๊ฐ ๋ณํํ ๋๋ง๋ค localStorage์๋ค๊ฐ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
const reducer = (state, action) => {
let newState = [];
switch (action.type) {
case "INIT": {
return action.data;
}
case "CREATE": {
// const newItem = {
// ...action.data,
// };
// newState = [newItem, ...state];
newState = [action.data, ...state];
break;
}
case "REMOVE": {
newState = state.filter((it) => it.id !== action.targetId);
break;
}
case "EDIT": {
newState = state.map((it) =>
it.id === action.data.id ? { ...action.data } : it
);
break;
}
// eslint-disable-next-line no-fallthrough
default:
return state;
}
localStorage.setItem("diary", JSON.stringify(newState));
return newState;
};
newState๊ฐ ์ถ๋ ฅ๋๊ธฐ ์ ์, localStorage์ ์ ์ฅ!


๊ธ์ ์๋ก ์์ฑํ๊ณ ํ์ธํด๋ณด๋, ์ ๋ค์ด์์๋ ๊ฑธ ๋ณผ ์ ์๋ค
์์ , ์ ๊ฑฐ ์์๋ ๋ฐ์์ด ์ ๋๋ค..!

ํ์ง๋ง ์ฌ๊ธฐ๊น์ง ํด๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง์๋ง ์ ์ฅ๋์ด์์ง
์ฌ๊ธฐ์๊บผ๋ด์ ์ฑ์ปดํฌ๋ํธ์ ์ ์ฉํ๋ ๊ฑด ์๋์ด์๊ธฐ๋๋ฌธ์,
์๋ก๊ณ ์นจํ๋ฉด ๋จ์ง ์๋๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ๋, ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์๋ ๊ฐ์ ๊บผ๋ด์,
๋ฐ์ดํฐ state์ ๊ธฐ์ด๊ฐ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
useEffect(() => {
const localData = localStorage.getItem("diary");
if (localData) {
const diaryList = JSON.parse(localData).sort(
(a, b) => parseInt(b.id) - parseInt(a.id)
);
dataId.current = parseInt(diaryList[0].id) + 1;
console.log(diaryList)
console.log(dataId)
}
}, []);
const dataId = useRef(0);
id๋ฅผ ์ค์ ํด ์ค ๋, ํ์ฌ ๊ฐ๊ณ ์ค๋ ์ผ๊ธฐ ๋ฐ์ดํฐ ์ค์ ๊ฐ์ฅ ๋์ id์ ๋ค์ ๊ฐ์ ์ง์ ํด์ค์ผ ํ๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ -> ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฑธ๋ก ๊ฐ์ฅ ๋์ id ๋ฅผ ์ฐพ์.


์ด์ ๋ ์ด diaryList๋ฅผ App ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง๋ ์ด๊น๊ฐ์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํจ.
useEffect ํจ์์,
dispatch({ type: "INIT", data: diaryList });
๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋น!
์ด์ ์๋ก๊ณ ์นจํด๋ ์์ด์ง์ง ์๋ ๋ด ๋ฐ์ดํฐ๋ค์ ๋ณผ ์ ์๋ค
'Project > Toy-project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 5 - ๋ฐฐํฌ & ํ๊ธฐ (1) | 2023.05.20 |
---|---|
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 4 - ์ต์ ํ (0) | 2023.05.19 |
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 2 - CRUD ๊ธฐ๋ฅ ๊ตฌํ (4) ์์ธ (0) | 2023.05.19 |
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 2 - CRUD ๊ธฐ๋ฅ ๊ตฌํ (3) ์์ (0) | 2023.05.19 |
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 2 - CRUD ๊ธฐ๋ฅ ๊ตฌํ (2) ์์ฑ (0) | 2023.05.19 |