-
728x90
๐ท 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์ผ๋ก ๋ชฉํ๋ฅผ ๋ฟ๋ ค์ฃผ๋ ํ๋ฉด์ ์์ฑํ๊ณ ์๊ณ
๋ด์ผ์ ๋ชฉํ๋ฅผ ํด๋ฆญํ๋ฉด ํฌ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํด๋ณด์.
728x90'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