๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ฐ์ตํ๊ณ Redux๋ฅผ ํ์ฉํ ํฌ๋๋ฆฌ์คํธ ์น์ฑ (ํ๋ก ํธ๋ฒ์๋ง ์งํ)
- Form (Form, input, button ์์๋ฅผ ํ์ฉํ์ฌ ํฌ๋ ์ถ๊ฐ, ์ญ์ , ์ธํ๊ฐ ๋ฆฌ์ , ์ถ๊ฐ ์ ๋ฒจ๋ฆฌ๋ฐ์ดํฐ ๊ตฌํ)
- List (๊ฐ์ฒด์ isDone ๊ฐ์ผ๋ก ํ ์ผ ๋ฆฌ์คํธ, ์๋ฃ ๋ฆฌ์คํธ ๊ตฌ์ฑ)
- Detail (๋ผ์ฐํฐ ๋ฐ Link, Navigate ํ์ฉํ์ฌ ๋ํ ์ผ ํ์ด์ง <-> ํ ์ฐ๊ฒฐ)
CSS / REACT(JS, JSX) / vercel
// home
<Todolist>
<Header />
<Form />
<List>
<Todo />
</List>
<Footer />
</Todolist>
// Detail
<Detail />
- input field ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ List์ ์ถ๊ฐํ๋ Submit ๋ฒํผ
- [Redux] todos module์์ ์ก์ ํฌ๋ฆฌ์์ดํฐ / ๋ฆฌ๋์๋ก ํจ์ ๊ตฌํ ํ Form ์ปดํฌ๋ํธ์์๋ dispatch๋ก ๋ณํ์ฌ๋ถ ์ถ์ Validation ์ถ๊ฐ
- ์ ๋ชฉ, ๋ด์ฉ ํ๋ ๊ฐ๊ฐ ์ ๋ ฅ๊ฐ ์กด์ฌ์ฌ๋ถ๋ฅผ ํ์ธํ๋ useState ์์ฑ
- ๊ฐ๊ฐ์ ์ ๋ ฅ๊ฐ์ด ์๋ ๊ฒฝ์ฐ add ๋ถ๊ฐ ๋ฐ ์ธํ ํ๋ ํ๋จ์ ์๋ด๋ฌธ๊ตฌ ๊ณ ์ง
- ADD ํน์ RESET ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ๋ฒจ๋ฆฌ๋ฐ์ดํฐ์ ์๋ด๋ฌธ๊ตฌ๋ ํจ๊ป ๋ฆฌ์ ๋จ
- [Redux]๋ฒํผ ํด๋ฆญ ์ setState๋ฅผ "" ๋ก ๋ณํ
- onClick ์ด๋ฒคํธ๋ก 'OnReset' ํจ์ ์ ์ธ, ๋ค์ค ํ๋ ๋ฐ์ดํฐ ๋์ ๋ณํ
- [Redux]onDelete ํจ์ ์ ์ธ
- filter๋ก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์ดํ ๊ณผ id๊ฐ ๊ฐ์ง์์ ์์ดํ ๋ง ๋ฆฌํด (์์ด๋๊ฐ ๋์ผํ ์์ดํ ๋ง ์ญ์ )
- [Redux]switchStatus ํจ์ ์ ์ธ, map ํจ์๋ฅผ ํ์ฉํ์ฌ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์ดํ ๊ณผ id๊ฐ ์ผ์นํ๋ ์์ดํ ์ 'isdone' ๊ฐ์ ๋ฐ๋๋ก ์ค์์น
- ๋ฒํผ ๋ณ๊ฒฝ : {isdone: true} ๋ฉด ํ์ฌ ์๋ฃ ์ํ์ด๋ฏ๋ก [์ทจ์]๋ฒํผ ๋ ธ์ถ, {isdone: false} ๋ฉด ํ์ฌ ์๋ฃํ์ง ์์ 'ํ ์ผ' ์ด๋ฏ๋ก [์๋ฃ]๋ฒํผ ๋ ธ์ถ (๋ฒํผ ๋ฐ ๋ฒํผ ์คํ์ผ ๋ณ๊ฒฝ)
- ์์น ๋ณ๊ฒฝ : ํ ์ผ ๋ฆฌ์คํธ - {isdone: false} ์๋ฃ ๋ฆฌ์คํธ - {isdone: true}
- Router๋ฅผ ํ์ฉํ์ฌ ๋ค์ค ํ์ด์ง ๊ตฌํ
๊ธฐ์กด W3์์ ๊ตฌํํ ๊ธฐ๋ฅ์ Redux๋ฅผ ๋์
ํ์ฌ ํ์ฅ๋ฆฌํฉํ ๋ง
์งํํ ํ๋ก์ ํธ์
๋๋ค. ๊ธฐ๋ฅ ์์ฒด๋ W3๊ณผ ๊ฑฐ์ ๋์ผํ๋ฉฐ, ์ผ๋ถ ๊ธฐ๋ฅ์ถ๊ฐ ๋ฐ ์ฝ๋๋ง ๊ฐ์ ๋์์ต๋๋ค.
- ๋๋์ด css ํ์ผ์ด ์๋
styled compponents
๋ฅผ ๋์ ํ์ต๋๋ค. - GlobalStyle.jsx ๋ฅผ ํ์ฉํ
์ ์ญ ์คํ์ผ ์ค์
๋ฐ ๊ฐ๋ณ ์ปดํฌ๋ํธ, ํ์ด์ง ๋ด์์ ์คํ์ผ๋ง์ ์งํํ์ต๋๋ค. - ์กฐ๊ฑด๋ถ Styled Components
props
์ฌ์ฉํ๊ธฐ : Todo ์ปดํฌ๋ํธ์ `border, color ์์๋ฅผ isdone์ value์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ์ฉ๋๋๋ก props๋ฅผ ํ์ฉํ์ต๋๋ค. - Link ์คํ์ผ๋ง์ ์ํ
props.children
์ฌ์ฉ
- ํ์ด์ง ๋ฐ ์ปดํฌ๋ํธ์ ์์ญ ์ค์ ์ ์ํ Grid ํ์ฉ
- ์ปดํฌ๋ํธ ๋ด ์์๋ค์ ํ/์ด ์ ๋ ฌ์ ์ํ Flex ํ์ฉ
๋ ์ด์์์ ์ํ CSS ๊ตฌ์กฐ์ ์คํ์ผ๋ง์ ์ฐ์ตํ๊ณ ์์ต๋๋ค.
- ์ผ๋ฐ CSS์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํ์ผ๋ ์ปดํฌ๋ํธ ๋ด์์ 'media query'๋ฅผ ํ์ฉํ์ต๋๋ค.
- PC์์๋ ๊ณ ์ ๋ ๋ฐ์ค์์ ์คํฌ๋กค๋ง์ด ๋๋ ๋ฐฉ์, MO์์๋ ํฌ๋ ์์ดํ ์ด ์ถ๊ฐ๋ ์๋ก ๋ฐ์ค๊ฐ ๋์ด๋๋ ํ์์ ์ฐจ์ฉํ์์ต๋๋ค. (overflow:auto; ๋ฐ ์คํฌ๋ฆฐ ๋๋น์ ๋ฐ๋ฅธ height ์กฐ์ )
- ์ง๋ ํ๋ก์ ํธ์์ ์คํจํ ํธํฐ(์ ํํ๋ ๋ฏธ๋ฌํ๊ฒ div์ ํฐ์์ฌ๋ฐฑ์ด ์๊ธฐ๋ ํ์)๋ฅผ ์์๊ฒ ๋ฃ๋๋ฐ ์ฑ๊ณตํ์ต๋๋ค.
- Redux๋ฅผ ์๋กญ๊ฒ ๋ฐฐ์ฐ๋, React์๋ ์น๋ฐํด์ง ๊ฒ ๊ฐ์ต๋๋ค. React ์ ๋๋ฉด ์๋ฐ์ด์ง๐
- Redux์์ store ์์ฑ ๋ฐ ๋ชจ๋ ์์ฑํ์ฌ ์ปดํฌ๋ํธ ํ์ด์ง๋ฅผ ๊ฐ๋ณ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ตํ๊ฒ ๊ฐ์ต๋๋ค.
์์ง ์ธ์ redux๋ฅผ ์ฐ๋๊ฒ ํจ์จ์ ์ธ์ง useState๊ฐ ๋ ํจ์จ์ ์ธ์ง ๊ตฌ๋ถํ๋๋ฐ ์ต์์น ์์ง๋ง,
์ถํ ์ด์ด์ง๋ ํ๋ก์ ํธ์์ ์ ์ฐจ ํจ์จ์ ์ธ ์ํ๊ด๋ฆฌ๋ฅผ ๋ฅ์ํ๊ฒ ๋๋ฆฌ๋ผ ๊ธฐ๋๋ฉ๋๋ค. - ์คํ์ผ ์ปดํฌ๋ํธ๋ฅผ ๋์
ํ ์ ๋ฒ ๋ฆฌ์กํธ ๋ค์ด ์ฑ์ ๋ง๋ค์์ต๋๋ค.
๋ฐ๋ณต๋๋ ํ๋ก์ ํธ๋ง๋ค ์ฌ๋ฌ๊ฐ์ง ์คํ์ผ๋ง์ ์๋ํด๋ณด๋ฉด์ css ๊ฐ ์ต์ํด์ก๋์ง,
์คํ์ผ๋ ์ปดํฌ๋ํธ๋ ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ง๋ง ์ตํ์ผ ํ๋ค๋ ๋ถ๋ด๊ฐ๋ณด๋ค ์ด์ ๋ณด๋ค ๋ ์ฝ๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ด๋ผ๋ ์๊ฐ์ด ๋จผ์ ๋ค์์ต๋๋ค. - ๋ฒจ๋ฆฌ๋ฐ์ด์ ์ ๋์ ํ์ต๋๋ค. ์๋ฟ์ด ์๋, ํ๋์ ์บก์ ํํ๋ก UI๋ก ๊ตฌํํ์ฌ ๋ณด๋ค ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ์์ ๊ณ ๋ฏผํ์ต๋๋ค.
- ํด์ผํ ์ผ๊ณผ ์๋ฃ๋ ํ ์ผ์ ๋ชจ๋ฐ์ผ ๋ฒ์ ์์ 1์ด๋ก ๋ฐฐ์นํ๋ ๊ฒ ๋ฟ ์๋๋ผ, ํ ๊ธ๋ก ๊ตฌํํ๊ณ ์ถ์ ์์ฌ์ด ์์์ง๋ง Detail ํ์ด์ง ๋๋ฒ๊น ์ด ์ง์ฐ๋์ด ์๊ฐ ๋ด ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค. ๋ค์ ํ๋ก์ ํธ์์๋ ํ ๊ธ ๋ฐฉ์์ ๋์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
<div>
๋ก์น ๋ง๊ณ , html ๊ตฌ์กฐ์ ์ผ๋ก ์ง๋ ์ฐ์ตํ๊ธฐํธํฐ ํฌํจํ css ๋์์ธ ์ ์ฉ ์ฐ์ตํ๊ธฐ๋ง์ดํฌ๋ก ์ธํฐ๋์ , ๋ง์ดํฌ๋ก ๊ธฐ๋ฅ๋ค ํ์ฅํด์ ์์ ํ๊ธฐ
- CRUD, useStae, Redux ํ์ฉ ๋ค์ง๊ธฐ
- ํ ๊ธ UI ์ฐ์ตํ๊ธฐ
Copyright 2022. hang-hae99 9th joyfive. all rights reserved.