๋ด์ผ๋ฐฐ์์บ ํ D-54 (12์ฃผ์ฐจ)
๐To Do List
* ๊ฐ์: ๋ฆฌ์กํธ ์ ๋ฌธ 2์ฃผ์ฐจ โ ๋๋ ์๋ฃ!!!
* UX์ง์ค๋ฐ: โข๋ฌธ์ ํด๊ฒฐ โ
01 ๊ฐ์: ๋ฆฌ์กํธ ์ ๋ฌธ 2์ฃผ์ฐจ
โ๏ธ์ปดํฌ๋ํธ ๋ฐ ๋ ๋๋ง
๏ผ์ปดํฌ๋ํธ
- ๋ฆฌ์กํธ์ ํต์ฌ
- UI์์๋ฅผ ํํํ๋ ์ต์ํ์ ๋จ์
- ํ๋ฉด์ ํน์ ๋ถ๋ถ์ด ์ด๋ป๊ฒ ์๊ธธ์ง ์ ํ๋ ์ ์ธ์ฒดโ
์ ์ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ธ DOM์ ์ฌ์ฉํด์ ์ปดํจํฐ๊ฐ ์ํํ๋ ์ ์ฐจ๋ฅผ ์ผ์ผ์ด ์์ฑํด์ ์ด๋ ค์ ๋ค๊ณ ํ๋ค.
ํ์ฌ๋ ๋ฆฌ์กํธ(์ ์ธํ ํ๋ก๊ทธ๋๋ฐ)๋ฅผ ์ฐ๋ฉด ์ด๋ป๊ฒ ํ๋ฉด์ ๊ทธ๋ ค์ผํ ์ง ๋ฆฌ์กํธ ๋ด๋ถ์์ ์ถ์ํ๋ฅผ ํ๋๋ฐ, ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๏ผ๋ ๋๋ง
- ์ปดํฌ๋ํธ๊ฐ ํ์ฌ props์ state์ํ์ ๊ธฐ์ดํด ์ด๋ป๊ฒ UI๋ฅผ ๊ตฌ์ฑํ ์ง ์ปดํฌ๋ํธ์๊ฒ ์์ฒญํ๋ ์์ .
์ด๋ ๊ฒ๋ง ๋ดค์ ๋ ๋ฌด์จ ๋ป์ธ์ง ์ ์ดํด๊ฐ ๊ฐ์ง์์๋๋ฐ ๊ฐ์ฌ๋๊ป์๋ ์ด๊ฒ์ ํ ๋ ์คํ ๋ ์ํฉ์ ๋น๋์ด์ ์ค๋ช ํด์ฃผ์ จ๋ค.
UI : ์๋ฆฌ
์ปดํฌ๋ํธ : ์ฃผ๋ฐฉ์ฅ
๋ฆฌ์กํธ : ์จ์ดํฐ
์ด๋ ๊ฒ ๋ดค์ ๋ ๋ ๋๋ง์ ํ๋ก์ธ์ค์ ๋ํด ๋ ์ ์ดํดํ ์ ์์๋ค.
<๋ ๋๋ง ํ๋ก์ธ์ค>
โ triggering: ๋ ๋๋ง ์ผ์ผํด (UI์ฃผ๋ฌธํ๊ณ ์ฃผ๋ฐฉ์ผ๋ก ๋ฆฌ์กํธ๊ฐ ์ ๋ฌํ๋ค)
โก rendering: ๋ ๋๋ง ํจ (์ฃผ๋ฐฉ์์ ์ปดํฌ๋ํธ๊ฐ UI๋ฅผ ๋ง๋ ๋ค)
โข commit: ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์ค์ DOM์ ์ปค๋ฐ (๋ฆฌ์กํธ๊ฐ ์๋ ํ
์ด๋ธ์ UI๋ฅผ ์ฌ๋ฆฐ๋ค)
trigger๋ ํผ๊ทธ๋ง๋ฅผ ๊ณต๋ถํ ๋๋ ๋ง์ด ๋ฐฐ์์ ์ต์ํ๋๋ฐ
๋ ๋๋ง๊ณผ ์ปค๋ฐ์ ๊ทธ๋ ์ง ์์๋ค. ๋ ์คํ ๋ ์ํฉ์ ๋น๋์ด์ ์๊ฐํด๋ณด๋ ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ ์ ์์๋ค.
๐ค๋ ๋๋ง์ ์ด๋ค ๊ฒฝ์ฐ์ ๋ฐ์ํ ๊น?
1) ์ฒ์ ๋ฆฌ์กํธ ์คํ
2) ๋ฆฌ์กํธ ๋ด๋ถ์ ์ด๋ค ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋์ ๋
- state ๋ณ๊ฒฝ, ์๋ก์ด props ๋ค์ด์ฌ ๋ → ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ด์ ๊ฐ์ ์ด์ ๊ฐ ๋ฐ์ํ ๋ (์์ ์ปดํฌ๋ํธ๋ ์ํฅ์ ๋ฐ์ ๋ฆฌ๋ ๋๋ง ๋จ)
<๋ฆฌ๋ ๋๋ง>
- ์ฌ์ฃผ๋ฌธํด์ ์ปดํฌ๋ํธ๊ฐ ์๋ก์ด UI(์๋ฆฌ)๋ฅผ ๋ง๋ค๊ณ ๋ค์ ์๋ํ ์ด๋ธ์ ๊ฐ๋ ๊ฒ
์๋ก๊ณ ์นจ์ ๊ฐ๋ ์ด๋ผ๊ณ ์ดํดํ๋ค.
ํ์ง๋ง ๋ฆฌ์กํธ ๋ ๋๋ง๊ณผ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํผ๋ํ๋ฉด์๋๋ค๊ณ ํ๋ค.
<๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ๋ก์ธ์ค> = ํ์ธํ ์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ํจ.
๋ ๋๋ง → ๋ฆฌ์กํธ๊ฐ DOM์ ๋ฐ์ดํธ → ๋ธ๋ผ์ฐ์ ์์ ํ๋ฉด ๋ณด์ฌ์ค.
โ๏ธDOM
๏ผDOM (Document Object Model): ๋ฌธ์๊ฐ์ฒด๋ชจ๋ธ
- ๋ฌธ์(document): ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ ์นํ์ด์ง
- ์๋ฆฌ๋จผํธ(element): ํ์ด์ง ์ด๋ฃจ๋ ์ปดํฌ๋ํธ
- ๋
ธ๋(node): ํธ๋ฆฌ์ ์์ ํ๋ํ๋. ๊ฐ ๋
ธ๋๋ ๋
ธ๋์ ์ ๊ทผ/์ ์ดํ ์ ์๋ API์ ๊ณต
- API(Application Programming Interface): html ์์์ ์ ๊ทผํด์ ์์ ํ ์ ์๋ ํจ์.
: ํด๋ผ์ด์ธํธ(์์ฒญ(๋)) - ์๋ฒ(๋ณธ์ฌ์์ ์๋ตํ๋ ์ปดํจํฐ)๋ก ๊ตฌ์ฑ
ํ๋ํ๋ ๋ชจ๋ ์์ฒญ์ ๋ค ์๋ตํ ์ ์์ด์ ๊ทธ ์ฌ์ด์ API๊ฐ ์๋ ๊ฒ.
์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ฒญํด์ผํ๋์ง, ๊ทธ๋ฐ ์์ฒญ์ ๋ณด๋ผ ๋ ์ด๋ค ํ์/๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋์ง ์ ๋ฆฌํ ๊ท๊ฒฉ/์ฝ์!
์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋ ์ฒด๊ณ!
์ฆ! ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ๋์์ฃผ๋ ๋งค๊ฐ์ฒด.
์ด๋ฐ ๋์คํฌ๋ฆฝ์ ์์ฒด๊ฐ API ๊ท๊ฒฉ์ด๋ผ๊ณ ๋ณด๋ฉด๋๋ค. ๋ก๊ทธ์ธ์ ํ์ ๋, ๋ก๊ทธ์ธํด์ ์ฐ๊ฒฐํ์ ๋, ๊ฐ์ ํ์ ๋, ๋ก๊ทธ์์ ํ์ ๋ ์ด๋ป๊ฒ ์ ์๊ฐ ์งํ๋๋์ง ๊ด๋ จ๋ ๊ฒ์ API๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค.
์ฆ. API๋ ์จ์ดํฐ๊ฐ์ ๋๋!
API๋ ์๋(ํ๋ก๊ทธ๋จ)์ด ์ฃผ๋ฌธํ ์ ์๊ฒ ๋ฉ๋ด(๋ช ๋ น ๋ชฉ๋ก)๋ฅผ ์ ๋ฆฌํ๊ณ , ์ฃผ๋ฌธ(๋ช ๋ น)์ ๋ฐ์ผ๋ฉด ์๋ฆฌ์ฌ(์์ฉํ๋ก๊ทธ๋จ)์ ์ํธ์์ฉํ์ฌ ์์ฒญ๋ ๋ฉ๋ด(๋ช ๋ น์ ๋ํ ๊ฐ)๋ฅผ ์ ๋ฌํ๋ค. ๋์์ ์ปดํฌ๋ํธ์ ์ญํ ๊ณผ ๋น์ทํ๊ตฌ๋..
๋ค๋ฅธ ํ์ฌ์ API๋ฅผ ์ฐ๋ฆฌ ํ์ฌ์ ๊ฐ์ ธ์์ ๊ตฌํ์ํฌ ์๋ ์๋ค๊ณ ํ๋ค.
๋ค๋ฅธ ํ์ฌ ๊ฐ๋ฐ์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ API → Open API
์ฐธ๊ณ ์ฌ์ดํธ 1: https://yozm.wishket.com/magazine/detail/53/
์ฐธ๊ณ ์ฌ์ดํธ 2: https://enjoyinjoanne.tistory.com/56
ํ์ฌ์์ APIํธ์ถ.. API๋ฅผ ๋ถ๋ฌ์์ผํ๋ค๋ ๋ง์ ๋ง์ด ๋ฃ๊ฒ๋๋๋ฐ
์ด๊ฒ ๋ฌด์จ ๋ป์ธ์ง ์์๋ณผ ์๊ฐ์ ํ์ง ์์๋ ๊ฒ ๊ฐ๋คใ ใ ใ ๋ง์ด ์ฌ์ฉ๋๋ ๋จ์ด์ธ๋งํผ ์์์ผํ์๋๋ฐ..
๐คAPI๊ฐ ๋ฌด์์ธ์ง ์๊ฒ ์ด. ๊ทธ๋ ๋ค๋ฉด "API ํธ์ถํด์ผ ํ๋ค"๋ ๋ป์ ๋ฌด์จ ๋ป์ผ๊น?
๊ด๋ จ๋ ๋ธ๋ฐ์น ํฌ์คํ ์ด ์์ด ์ฐธ๊ณ ํ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ 1: ๊ธฐํ์์ธ ๋ด๊ฐ ์์ง๊น์ง API๊ฐ ํท๊ฐ๋ ธ๋ ์ด์ - ์ด๋ก
์ฐธ๊ณ ์ฌ์ดํธ 2: ๊ธฐํ์์ธ ๋ด๊ฐ ์์ง๊น์ง API๊ฐ ํท๊ฐ๋ ธ๋ ์ด์ - ์ค์
์ฐ๋ฆฌ๋ API๋ฅผ ์ฌ์ฉ ํ๊ธฐ ์ ๊ผญ ์ง์ผ์ผํ ์กฐ๊ฑด/์ฝ์์ด ์๋ค.
1) API URL
- ๋๊ตฌ์๊ฒ, ์ด๋ค ์์ฒญ์ ํ ๊ฒ์ธ์ง ๋ช ์ (์๋ฒ ์ฃผ์/ ๊ธฐ๋ฅ ์ด๋ฆ)
2) ๋ฉ์๋: ์์ฒญ์ ์ข
๋ฅ (4๊ฐ์ง๊ฐ ์์ผ๋ฉฐ CRUD๋ผ๊ณ ๋ถ๋ฆผ)
โ create(=POST): ์๋ฒ์ ๋ฐ์ดํฐ ์์ฑํ๋ ์์ฒญ
- ํด๋ผ์ด์ธํธ A ์ ๋ณด → ์๋ฒ B ์ ๋ก๋ ๊ฐ๋ฅ
โก read(=GET): ์๋ฒ์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๋ ์์ฒญ
- create์ ๋ฐ๋. ์๋ฒ B ์ ๋ณด → ํด๋ผ์ด์ธํธ A๋ก ๊ฐ์ ธ์ด.
โข update(PUT/PATCH): ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ ์์ฒญ
- ์๋ฒ B์ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ A๊ฐ ๋ค๋ฅธ ์ ๋ณด๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ.
โฃ delete: ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ์์ฒญ
- ์๋ฒ B ๋ฐ์ดํฐ ์ญ์ ๊ฐ๋ฅ
๐ก์์ฉํ๊ธฐ
๐จ๐ป์ด API ๋ฉ์๋๊ฐ ๋ญ์ฃ ?
๐create ์ ๋๋ค!
3) ํค๋,๋ฐ๋,ํ๋ผ๋ฏธํฐ(๋งค๊ฐ๋ณ์)
์ฐ๋ฆฌ๊ฐ ์ด๋ฉ์ผ์ ๋ณด๋ผ๋ " ์ ๋ ์ด๋์ด๋ ํ์ฌ์ ๋๊ตฌ๋๊ตฌ์ ๋๋ค~ ์ด๊ฑธ ์์ฒญํ๊ณ ์ถ์๋ฐ์~" ์ด๋ฐ์์ผ๋ก ๋ณด๋ด๋๋ฐ
API์์ฒญํ ๋๋ ๋๊ฐ๋ค๊ณ ํ๋ค.
โ Header(ํค๋) ๋ด๊ฐ ๋๊ตฌ์ธ์ง?
โก Body(๋ฐ๋) ์ด๋ค ๊ฑธ ์์ฒญํ ๊ฒ์ธ์ง?
์ด๋ ๊ฒ ์ ๋๋ฐ ์ฌ๊ธฐ์ ์์์ผ ํ๋ ๊ฐ๋ ์ parameter, value.
๏ผparameter(ํ๋ผ๋ฏธํฐ): ๋น๋ฐ๋ฒํธ์ฒ๋ผ ์์ฒญํ ๋๋ง๋ค ๊ฐ์ด ๋ฌ๋ผ์ง๋ ํญ๋ชฉ.
ex. ๋น๋ฐ๋ฒํธ = ํ๋ผ๋ฏธํฐ / ๋น๋ฐ๋ฒํธ ๊ฐ = value
4) ์๋ต์ ๋ช ์ํ
API๋ ์ฒด๊ณ๋ฅผ ์ ํด๋์ ๊ฑฐ๋ผ ์๋ต์๋ ์ ํด์ง ๋ฐฉ์์ด ์๋ค๊ณ ํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ ์ํด์ ๋ค ๋ค๋ฅด์ง๋ง
API์์ฒญ ์ ์ฑ๊ณต ์๋ต/ ์คํจ ์๋ต์ผ๋ก ๋๋๋ค๋ ๊ฒ์ ์ ํด์ ธ์๋ ๊ฑฐ๋๊น ์๊ณ ๊ฐ๊ธฐ!
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก API๋ฅผ ํธ์ถํ๋ ํฌ์คํ ์ ํตํด ์ด๋ป๊ฒ API๋ฅผ ํธ์ถํ๋์ง ์ฝ์ด๋ดค๋ค.
APIํธ์ถํ๊ธฐ ์ํด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋กํด์ผํ๊ณ
์ด๋ฐ์์ผ๋ก ๋ฉ์๋๋ฅผ ์ ํํ๊ณ URL์ ์ ๋ ฅํ๋ ๊ฐ์ด๋๊ฐ ์๋ด๋๊ณ ์๋ค.
์ด๋ฐ์์ผ๋ก API ํธ์ถ์ด ์ด๋ฃจ์ด์ง๋๊ตฌ๋. API๊ด๋ จํด์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฐ ๋ง์ ํ๋ฉด ์ด๋ ์ ๋ ์ดํดํ ์ ์์ง ์์๊น ์์ํด๋ณธ๋ค.
- DOM์ด๋? ์๋ฆฌ๋จผํธ๋ฅผ tree ํํ๋ก ํํํ ๊ฒ.
๋ค๋ฅธ ์ค๋ช ์์ ๋ณด๋ฉด DOM์ html๋ฌธ์๋ฅผ ๊ฐ์ฒด๋ก ํํํ ๊ฒ์ด๋ผ๊ณ ๋ ํ๋ค.
์ถ๊ฐ์ ์ผ๋ก DOM์ค๋ช ํฌ์คํ ๋ ์ฐธ๊ณ ํด์ ์ฝ์๋ค.
์ฌ๋ฌ๊ฐ์ ์ค๋ช ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฝ์ด์ ๊ทธ๋ฐ์ง DOM์ ๊ตฌ์กฐ ๊ฐ์ ๊ฑธ ๋ ๋ช ํํ๊ฒ ํ ์ ์์๋ค.
ํ์ง๋ง ์ด๋ก ์ผ๋ก๋ง ๋ค์ด์๊ทธ๋ฐ์ง ์์ ํ๊ฒ ์ดํดํ์ง ๋ชปํ๋ค.
๊ทธ๋ฅ ์์ ๋๋ก๋ง ์ดํดํ๊ณ ๋์ด๊ฐ์ผ๊ฒ ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ: DOM์ ์ ํํ ๋ฌด์์ผ๊น?
โ๏ธ๊ฐ์DOM(Virtual DOM)
- ๋ฆฌ์กํธ๋ ๊ฐ์๋์ด๋ค. ์ค์ ๋๊ณผ ๊ฐ์๋ ํํ๋ ๋๊ฐ๋ค.
์ค์ ๋์ ์๋์ง๋ง ๊ฐ์ฒดํํ๋ก ์ ์ฅํ ์ ์์ด ๋ ๋น ๋ฅด๊ฒ ์กฐ์ํ ์ ์๋ค๊ณ ํ๋ค.
๐ค์ค์ ๋์ด ์๋๋ฐ ๊ฐ์๋์ผ๋ก ์ด๋ป๊ฒ ํ๋ฉด์ด ๋ฐ๋๋ ๊ฑด๊ฐ์?
โ ๋ฆฌ์กํธ๋ 2๊ฐ์ง ๋ฒ์ ์ ๊ฐ์DOM ๊ฐ์ง.
- ํ๋ฉด ๊ฐฑ์ ์ /ํ์ ๊ฐ์ DOM(๊ฐฑ์ ํ ๊ณผ์ ์ด ๋ฆฌ๋ ๋๋ง์ํ์ด๋ฉฐ ์ด๋ ๊ฐ์DOM๋ง๋ค๊ฒ๋จ)
โก diffing: ๊ฐฑ์ ์ ,ํ ๊ฐ์๋ ๋น๊ตํด์ ์ด๋ ์๋ฆฌ๋จผํธ์์ ๋ณํ๊ฐ์๊ฒผ๋์ง ๋นจ๋ฆฌ ํ์
.
โข ์ฌ์กฐ์ (reconciliation): ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ์ฉ์ํด.
- 5๊ฐ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด? ํ๋ํ๋ ๋ณ๊ฒฝX → ๋ชจ์์ ํ ๋ฒ์ ๋ณ๊ฒฝ!!! ์ด๊ฑธ Batch Update๋ผ๊ณ ํจ.
โ๏ธ๋ธ๋ผ์ฐ์ ๋ ๋๋ง(=ํ์ธํ )
- ๋ฆฌ์กํธ๊ฐ ์์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ ๋๋ง์ ํ๋ฉด ๊ทธ ๋ค์์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ผ๋ก ์ด์ด์ง๋ค.
(๋ฆฌ์กํธ)์ค์ ๋ ์ ๋ฐ์ดํธ → ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง → ํ๋ฉด ๋ฐ์
<๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ >
โ ์คํ์ผ ๊ณ์ฐ: html, css๋ถ์ํด์ ์คํ์ผ ๊ณ์ฐ.
โก ๋ ์ด์์: ์์น, ํฌ๊ธฐ ๊ณ์ฐ
โข ํ์ธํ
: 2๋ฒ๋จ๊ณ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๋ํ๋.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง๊ณผ ๋ฆฌ์กํธ ๋ ๋๋ง์ ๋ค๋ฅด๋ค!!!
๐ฌ์ค์ต: ์นด์ดํฐ ์ฑ ๋ง๋ค๊ธฐ
๊ฐ์๊ธฐ ๋ง๋ค๋ผ๋๊น ๋ชปํ๊ฒ ๋ค.. ์ด๋์ ์ด๋ป๊ฒ ํ๋......?ใ ใ ใ
๊ฐ์ฌ๋์ ๋ฌธ์ ํ์ด ์์์ ๋จผ์ ๋ณด๊ณ ๋ฐ๋ผํ ํ ๋ค์ ํผ์ ์ค์ตํด๋ณด๋ ์๊ฐ์ ๊ฐ์ก๋ค.
import React, { useState } from "react";
const App = () => {
const [number, setNumber] = useState(0);
const onMinusButtonClick = () => {
setNumber(number-1);
}
const onPlusButtonClick = () => {
setNumber(number+1);
}
return (
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
}}
>
<div>{number}</div>
<div>
<button onClick={onMinusButtonClick}>-1</button>
<button onClick={onPlusButtonClick}>+1</button>
</div>
</div>
);
};
export default App;
+๋ฒํผ์ ๋๋ฅด๋ฉด ์ซ์๊ฐ 1์ฉ ์ถ๊ฐ๋๊ณ
-๋ฒํผ์ ๋๋ฅด๋ฉด ์ซ์๊ฐ 1์ฉ ์ค์ด๋ค๊ฒ ๋ง๋ค์๋ค.
โ๏ธ๋ฆฌํฉํ ๋ง
- ๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ ์ฒ๋ฆฌ
- ์ปดํฌ๋ํธ ๋ถ๋ฆฌ
์ด๋ฆ.map() ์์๋
์ด๋ฆ.map(function () {}) ์ฝ๋ฐฑํจ์๊ฐ ๋ค์ด๊ฐ๊ณ function๋ค์ ๊ดํธ์ ์๋๊ณณ์ ๋ฐ๋ณต๋๋ ์์์ ๋ํ ํ ๋น์ด ์ผ์ด๋จ.
import { useState } from "react";
const App = () => {
const vegetables = [`๊ฐ์`, `๊ณ ๊ตฌ๋ง`, `์ค์ด`, `๊ฐ์ง`, `์ฅ์์`];
return (
<div style={{ padding: "20px", display: "flex", gap: "20px" }}>
{vegetables.map((vegetableName) => {
return (
<div className="square-style" key={vegetableName}>
{vegetableName}
</div>
);
})}
</div>
);
};
export default App;
()map์ ์ด์ฉํด์ ๋ฐฐ์ด์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์๊ฒ๋๋ค.
css ์คํ์ผ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฐ๊ธฐ ์ํด ์ข ๋ ๋ค์ ์๋ ๊ฐ์๋ฅผ ๋ณด๋ฉฐ ๋ฐ๋ผํด์ผ๊ฒ ๋ค.
<๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด map์ผ๋ก ๋ฐํํ๊ธฐ>
import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div>{props.user.age}์ด - {props.user.name}</div>
);
}
const App = () => {
const users = [
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
];
return (
<div className="app-container">
{users.map((user) => {
return <User user={user} key={user.id} />;
})}
</div>
);
};
export default App;
key: ์๋ฆฌ๋จผํธ ๊ณ ์ ์๋ณ์
- ๋์ ์ธ ๋ฆฌ์คํธ์์ ์๋ฆฌ๋จผํธ ๊ณ ์ ํ ํค๊ฐ์ ๊ฐ์ ธ๊ฐ์ผํ๋ค. (์ค๋ณตX)
- ์ผ๋ฐ์ ์ผ๋ก map() ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉ๋๋ค.
App์์ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๋ชจ๋ ๊ฑธ ์ ์ผ๋ ค ํ์ง ๋ง๊ณ
User์ปดํฌ๋ํธ์์ propsํด์ ์ค๊ดํธ ์ด์ฉํด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ ,
๋ง๋ค์ด์ง User์ปดํฌ๋ํธ๋ฅผ App return๊ฐ์ ํ๊ทธํ์์ผ๋ก ๋ฃ์ด์ ๊ทธ ์์ฑ๋ง ์กฐ์ ํ๋ ๋๋!
์ด๋ฐ์์ผ๋ก๋ผ๋ ์ธ์์ผ๊ฒ ๋ค..ใ ใ ใ ใ
์ฌ๊ธฐ์! ์ฐ๋ฆฌ๋ const users๋ฅผ stateํ์์ผ๋ก ๋ง๋ค์ด์
๋ ๋๋ง๋ ์ ์๊ฒ ๋ง๋ค์ด์ค์ผํจ.
๊ทธ๋ด๋ ํ์ํ ๊ฑด ๋ญ๋ค? useState๋ฅผ ์จ์ค์ผํ๋ค.
[value, setValue] = useState(); ๋ฅผ ์ฌ์ฉํด๋ณด์.
import { useState } from "react";
const [users, setUsers] = useState([
{
id: 1,
age: 30,
name: `์ก์ค๊ธฐ`,
},
{
id: 2,
age: 23,
name: `ํํ์ง`,
},
{
id: 3,
age: 35,
name: "์ฐ๋ค๋ผ๋ฐ",
},
{
id: 4,
age: 36,
name: `๊น์ฐ๋น`,
},
]);
return (
<div style={{ padding: "20px", display: "flex", gap: "20px" }}>
{users.map((user) => {
return <User key={user.id} user={user} />;
})}
</div>
);
export default App;
const User = (props) => {
return (
<div>
{props.user.age}์ด - {props.user.name}
</div>
);
};
์ด๋ ๊ฒํ๋๋ ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ด๋ค. ใ ใ
๋ค์ ๊ฐ์๋ฅผ ๋ณด๊ณ ๋ฐ๋ผํด๋ ๊ฐ์ฌ๋์ ๋๋๋ฐ ๋๋ ์๋จ... ์ผ๋จ ์ฝ๋๋ฅผ ์ฒจ๋ถํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ฆฌ๋จผํธ์ ๊ณ ์ ์๋ณ id/key๊ฐ์ ๋ฃ์ด์ค์ผํ๋ ์ด์ !
1,2,3,4๋ผ๋ ๊ฐ์ด ์๋ค๊ณ ์น์. ์ด ๋ฐฐ์ด์ length๋ 4์ด๋ฏ๋ก ํ๋ ๋ ์ถ๊ฐํ๋ฉด 4์์ +1์ด๋๊น 5.
1,2,3,4,5์์ ์ค๊ฐ์ ์๋ ๊ฐ์ธ 2๋ฅผ ์ญ์ ํ๋ค๊ณ ์ณ๋ณด์.
๊ทธ๋ฌ๋ฉด 1,3,4,5. ์ด๊ฒ์ length์ญ์ 4์ธ๋ฐ ์ฌ๊ธฐ์ ํ๋๋ฅผ ๋ ์ถ๊ฐํ๋ฉด
1,3,4,5,5 ์ด๋ฐ์์ผ๋ก ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ํด๋น ์๋ฆฌ๋จผํธ์ ๊ณ ์ id๋ฅผ ๋ฃ์ด์ค์ผํ๋ค.
๊ฐ์ฌ๋๊ป์๋ ๋ ์ง, ์๊ฐ์ผ๋ก ๋ถ๋ณํ ์ ์๋ ๋ฉ์๋๋ฅผ ๋ฃ๊ณ ํน์๋ผ๋ ๊ฐ์ ๋ ์ง, ๊ฐ์ ์๊ฐ์ ์ฌ๋ฌ๋ฒ ๋๋ฅผ ๊ฒ์ ๋๋นํ์ฌ +1์ฒ๋ฆฌ๋ฅผ ํด์คฌ๋ค.
์ด๋ฐ์์ผ๋ก.
๋ง์ง๋ง ๊ฐ์๊น์ง ๋ชจ๋ ๋ดค์ง๋ง
์ง๋๊ฐ ๋๋ฌด ๋นจ๋ผ์....
๋๋จธ์ง๋ ๋ด์ผ ํ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค.
02 UX์ง์ค๋ฐ: ์์นด ๋ฌธ์ ํด๊ฒฐ
ํ ์งํ์ํฉ ๋ณด๊ณ ๋๋ฆฝ๋๋น
ํฐ ๋ฐฉํฅ์ฑ์ ์๋ฃจ์
์ ๋ฆฌ (์๋ฃ)
๊ฐ์ค ์ค์ (์๋ฃ)
๊ฐ์ค ๊ทผ๊ฑฐ ์์น (์งํ์ค)
<๊ณต์ง>
01/08 ๋ชฉ์์ผ ์คํ 4์์ ํผ๊ทธ๋ง์ ๋ชจ์ฌ ๋ชป ํ ๋ถ๋ถ ์ถ๊ฐ๋ก ๋ ์์
ํ ์์ ์
๋๋ค!
<ํ ์ผ ๋ชฉ๋ก>
1. ๊ฐ์ค 1๋ฒ์ ๋ํ ๊ทผ๊ฑฐ ์๋ฃ ์์ง
- ๊ฐ์ค 1๋ฒ ๊ทผ๊ฑฐ๋ง ์ฐพ๋ ์ด์ ๋ ์ฐ์ ์์ 1๋ฒ์งธ์ธ ์ , ๊ทธ๋ฆฌ๊ณ ์๊ฐ์์ ๋ฌธ์ ๋ก ํด๋น ๊ทผ๊ฑฐ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฐพ์๋ณด๊ธฐ๋ก ํ์ต๋๋ค!
- ํ ์ผ: ์ฌ์ฉ์ ํต์ฌ ํ๋, ๋น์ฆ๋์ค ๋ชฉํ, ํนํ ใ
ใ
๋๊ป์ ์ฐพ์์ฃผ์ ๊ฒฝ์์ฌ ์ฌ๋ก ๋ฐ์ดํฐ ์์น
2. ์ฅํ ์ ์
- ๋์์ธ์ ๊ตฌ์ ๋ฐ์ง ๋ง๊ณ ํฉ์๋น~!
- ํ ์ผ: ํฐ ๋ฐฉํฅ์ ์๋ฃจ์
, ๊ฐ์ค ์ค์ , ๊ฐ์ค ๊ทผ๊ฑฐ, ๊ตฌ์ฒด์ ์ธ ์๋ฃจ์
, ์์ด์ดํ๋ ์ (์์ ๋
ผ์ ํ์)
<์์ ์ด์>
์ด์ ํผ๋๋ฐฑ ๋ฐ์ ๋๋ก ํฐ ๋ฐฉํฅ์ฑ์ ์๋ฃจ์
, ๊ฐ์ค ์ค์ ๋
ผ์ ์ค,
๊ฐ์ค์ ๊ธฐ์ค์ ๋ํด ๋ช
ํํ๊ฒ ํด๊ฒฐ์ด ๋์ง ์์์ ๊ฐ์ค ๊ด๋ จ ์ง๋ฌธ์ ์ํด ํํฐ๋๊ป ๋ฐฉ๋ฌธ.
ํผ๋๋ฐฑ1 : ๊ฐ์ค์ ์ต๋ํ ๋ช
ํํ๊ฒ ์์ฑํ๋ ๊ฒ ์ข๋ค. ๊ทธ๋์ผ ๋ช
ํํ ๊ฐ์ค์ด ๋์ฌ ๊ฒ.
ํผ๋๋ฐฑ2 : ๊ท๋ฒํ ๋ ํ๋ก์ธ์ค(์์)์ ์ฝ๋งค์ด์ง ์๋๋ก ์ฃผ์ํ์.
ex) ๊ผญ ๊ฐ์ค์ '๋จผ์ ' ์ค์ ํ๊ณ '์๋ฃจ์
'์ ๋ด์ผํด. โ
์๋ฃจ์
์ ๋จผ์ ๋์ถํ๋ค? ๋ค์ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํ์ด์ผํ ๊น? ๊ฐ์ค์ ์ค์ ํด๋ณด์! โญ
์ค๋ UX์ง์ค๋ฐ์ ์ฐธ์ฌํ์ง ๋ชปํ ์ธ์์ ์ํด ์ ๋ฆฌํ dm์ธ๋ฐ
์ค๋์ ์ฒด๋ ฅ์ด ์์ด์ ์ด ์ ๋๋ก๋ง ์ ๋ฆฌํด์ผ๊ฒ ๋ค.
๋ง๋ฌด๋ฆฌํ๋ฉฐ...
ํ ์ผ์ด ์ ์ด๋ ๊ฒ ๋ง์๊น!
- ๋ฆฌ์กํธ ๊ฐ์ธ ํ๋ก์ ํธ
- UX์ง์ค๋ฐ
- ์ต์ข ํ๋ก์ ํธ ๊ณํ
๊ฐ์ธ ๋ ธ์ ๋ ์ ๋ฆฌํ๋ ์ต๊ด์ ๋ค์ด์
+ ์๊ฐ์ ์ ํ์ฉํ์.. ์์ ๋๋ฌด ํ์ด์ง