2022. 2. 1. 23:31ใWEB Dev/ToyProject
๐ท CloneTodo โ - Todomate Clone Project | Team CloneMate
CloneTodo : ๋ง์ ์ฌ๋๋ค์ด ์ฌ๋ํ๋ ํฌ๋๋ฉ์ดํธ๋ฅผ ํด๋ก ํ์ฌ ์น ์๋น์ค๋ฅผ ๋ฐฐํฌํด๋ณด๋ ํ๋ก์ ํธ
์ฐํด๊ฐ ๋ฒ์จ ๋ฐ์ด ์ง๋๊ฐ๋ค. ๋ํ๋ฐ์ ์๋๋ ์งง์ ์ฐํด์ง๋ง ์ค๋๋ง์ ๊ธธ๊ฒ ์ฌ์ด์ ์ข๊ธด ํ๋ค.
ํ๋ก์ ํธ ์ฝ๋๋ฅผ ํ ํ ์์ฑํ์ด์ผ ํ๋๋ฐ ์ค์ค๋นํ๋ฉด์ ํํ์ด ํ๋ ๊ฒ๋ ์ฝ์ง ์์๋ค ใ ใ ใ ใ
์ด์ ๊น์ง๋ ์งฌ์งฌ์ด ๋ชฉํGoals ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ ์ผ๋ก ์๋ฆฌํ๋ค.
- ์ ๋ฒ์ฃผ๊น์ง ํ ์ผ
1. ๋ชฉํ ์ปดํฌ๋ํธ ์์ธ ์์
๋ชฉํ Goals ์ปดํฌ๋ํธ์ '๊ณต๊ฐ ์ค์ ' ๊ณผ '์์' ๋ถ๋ถ์ State๋ฅผ ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง๋ค์๋ค.
์ฒ์ ๊ตฌํํ ๋๋ ๊ตฌํ ์์ฒด์ ์ ๊ฒฝ์ฐ๋๋ผ๊ณ ๊น๋ค์ ๋์ ์ฑ ์ ๊ทธ๋๋ก ๋ฐ๋ผ ๋ถ์๋๋ฐ, ์ด๋ฒ์ ์ฝ๋๋ฅผ ์์ ํ๋ค ๋ณด๋ ์ฝ๋ ๊ธธ์ด๋ ๋ง์ด ๊ฐ๊ฒฐํด์ง๊ณ state๋๊ธฐ๊ณ ๋ฐ๊ณ ์์ ์ ์ด๋ป๊ฒ ํด์ผํ๋ ๊ฑด ์ง ๋๋ ์ ์์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชฉํ ๋ฆฌ์คํธ์์ +๋ฅผ ํด๋ฆญํ๋ฉด ๋ชฉํ ์ถ๊ฐ ํ์ด์ง๊ฐ, ๋ชฉํ๋ฅผ ํด๋ฆญํ๋ฉด ๋ชฉํ ์์ ํ์ด์ง๊ฐ ๋ฐ ์ ์๋๋ก Router๋ ์์ ํ๋ค.
<Route exact path="/goals">
<BasicNavBar/>
<Goals />
</Route>
<Route exact path="/goalForm">
<BasicNavBar/>
<GoalForm />
</Route>
<Route exact path="/goalEditForm/:originID">
<BasicNavBar/>
<GoalEditForm />
</Route>
๊ทธ๋ฆฌ๊ณ ๋ชฉํ ์์ ํ์ด์ง์์๋ : ๋ฅผ ์ฌ์ฉํด์ url์ get ๋ฐฉ์์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ ํด๋น id์ state๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์์ ๋๋๋ก ํ๋ค.
๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ํด๋น ๊ธฐ๋ฅ๋ค์ state๋ ์์ , ์ญ์ ๊ฐ ๋๋๋ก ํจ์๋ฅผ ์์ ํ๋ค.
์ฌ๊ธฐ์ ์์ฒญ ์ค๋ ๊ฑธ๋ ธ๋ค. ์ ๋ฒ์ฃผ๋ ์ ๋ถ ์ฌ๊ธฐ์ ํฌ์ํ ๊ฑฐ ๊ฐ๋ค. ์ข ๋ ์ ์ ์ด ์์์ผ๋ฉด ์์ธํ๊ฒ ๊ธฐ๋กํ์ํ ๋ฐ...
state ์ ๋ณด ์ค์์ bg_color ๋ ๋ง๋ค์ด์ผ ํ๋๋ฐ ํ์ฌ ํฌ๋๋ฉ์ดํธ๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๋ฐ๋์ bg_color ๊ธฐ๋ฅ์ด ์ฌ๋ผ์ก๋ค! ๊ทธ๋์ title_color ๋ง ๊ฐ์ง๊ณ ์๋ ๊ฒ ๊ฐ์์ ๋์ค์ ์ถ๊ฐํ๋์ง ํด์ผ๊ฒ ๋ค.
2. Dialog ์ ์ฉ
์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ MUI์ Dialog ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ฌ์ฒ๋ผ ๋์์ง๋๋ก ํ๋ค.
Dialog ๋ฅผ ์ ์ฉํ์ง ์กฐ๊ธ ๋ ์์ฐ์ค๋ฌ์ด UI๊ฐ ๋์๋ค.
SCSS๋ก CSS๋ ์์ ํ๊ณ ์์ ์ ํ ์ ์์ ์์์ด ๋ณด์ผ ์ ์๋๋ก ํ๊ณ , radio ๋ฒํผ์ผ๋ก ๊ตฌํํ input๋ค์ด ๋ณํ ๋ ๋ง๋ค state๋ ๋ณํ ์ ์๋๋ก ํ๋ค.
3. Recoil์ ์ ์ฉ
Recoil์ ์ค์นํ๊ณ , atoms๋ผ๋ ํด๋์ todoData๋ผ๋ ํ์ผ์ ๋ง๋ค์ด์ state ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
state๋ค์ atom์ผ๋ก ๊ฐ ์ปดํฌ๋ํธ์ ๋ฟ๋ ค์ง๊ณ ์ฒ์ ๋ฐ์ดํฐ๋ก ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ default์ ์์ฑํ๋ค.
import { atom } from "recoil";
export const textState = atom({
key: 'textState', // unique ID (with respect to other atoms/selectors)
default: '', // default value (aka initial value)
});
export const calendarData = atom({
key: 'calendarData', // unique ID (with respect to other atoms/selectors)
default: [
{ numTodoDay: 8, numCountTodo: 2, completeYn: 'n' },
{ numTodoDay: 13, numCountTodo: 4, completeYn: 'n', },
{ numTodoDay: 29, numCountTodo: 6, completeYn: 'y' } ] // default value (aka initial value)
});
export const goalsData = atom({
key: "goalsData",
default: [
{
"goal_id": 0,
"next_goal_id": 1,
"title": "์ฒซ ๋ฒ์งธ ๋ชฉํ",
"privacy": "PUBLIC",
"bg_color": "",
"title_color": "#3CB371"
},
{
"goal_id": 1,
"next_goal_id": 2,
"title": "๋ ๋ฒ์งธ ๋ชฉํ",
"privacy": "PRIVATE",
"bg_color": "",
"title_color": "#C71585"
}
]
})
export const goalReadOnly = atom({
key: "goalReadOnly",
default: "read"
})
Recoil์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ App.js ๋ก ์ ๋ถ ์ฌ๋ ค๋ณด๋๋ ํจ์๋ค๋ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ถ ์ฎ๊ฒผ๋ค.
๋ชฉํ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์ App.js ์ ์๋ ์ถ๊ฐ, ์์ , ์ญ์ ํจ์๋ค์ ํ ๋ฒ ์์ ํ์๋๋ฐ ์ด๋ฒ์ ํจ์๋ฅผ ํ์๋ก ์ฎ๊ธฐ๋ฉด์ ๋ ์์ ์ ๋ฐ๋ณตํด์ผํ๋ค.
์ญ์ ํ๋ฐฉ์ ํ๋๊ฒ ์ต๊ณ ๋ค.
์ง๊ธ ํ๊ณ ์๋ ๊ฒ์ Feed ํ๋ฉด์ atom์ผ๋ก ๋ชฉํ๋ฅผ ๋ฟ๋ ค์ฃผ๋ ํ๋ฉด์ ์์ฑํ๊ณ ์๊ณ
๋ด์ผ์ ๋ชฉํ๋ฅผ ํด๋ฆญํ๋ฉด ํฌ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํด๋ณด์.
'WEB Dev > ToyProject' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 35 (0) | 2022.02.08 |
---|---|
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 34 (0) | 2022.02.03 |
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 32 (0) | 2022.01.26 |
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 31 (0) | 2022.01.24 |
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 30 (0) | 2022.01.16 |