[React] React.memo, useMemo, useCallback
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 24. 20:11

Today, What I learned? ํ”„๋ก ํŠธ์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ธ๊ฐ€?๋ฅผ ์š”์ƒˆ ๊ณ ๋ฏผํ•˜๊ณ  ์ฐพ์•„๋ณด๊ณ , ์—ฌ๋Ÿฌ ๊ธ€๋“ค์„ ์ฝ์–ด๋ณด๊ณ  ์žˆ๋‹ค. ๊ทธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ์ค„์ด๊ธฐ!.. ๋ Œ๋”๋ง์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ memoization์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณธ๋‹ค. memoization memoization์€ ๋ฆฌ์•กํŠธ์—๋งŒ ํ•ด๋‹น๋˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ๋™์ผํ•œ ๊ณ„์‚ฐ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ, ์ด์ „์˜ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ๋†“๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ˜๋ณต ์ž‘์—… ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์„ ๋ฉ”๋ชจ๋ฅผ ํ•ด๋†“๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋Š๋‚Œ? ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ์˜ memoization ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€. React.memo, useMemo, useCallba..

[React] useEffect์˜ ์‹คํ–‰ ์‹œ์ 
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 23. 10:49

Today, What I learned? ์ž‘์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋‹ค๊ฐ€ null๊ฐ’์ด ํฌํ•จ๋˜์–ด์„œ ์›๋ž˜ ๋˜๋˜ ๊ธฐ๋Šฅ์ด ์•ˆ ๋˜๋Š”(!) ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ฐœ๊ฒฌํ•˜์‹  ๋ถ„์ด ๋ฐ”๋กœ ํ•ด๊ฒฐํ•ด ์ฃผ์…จ์ง€๋งŒ, ๋งˆ์นจ ๊ทธ ๋ถ€๋ถ„์ด useEffect๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๋ถ€๋ถ„์ด๊ณ .. ๋‚ด๊ฐ€ useEffect์˜ ์‹คํ–‰ ์‹œ์ ์— ๋Œ€ํ•ด์„œ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌํ•œ๋‹ค! useEffect์˜ ์‹คํ–‰ ์ˆœ์„œ ๋‚˜๋Š” ๊ธฐ์กด์— useEffect๊ฐ€ ์ œ์ผ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, (์ •ํ™•ํžˆ ์™œ์˜€๋Š”์ง€๋Š”?..๐Ÿค”) useEffect ๊ฐ™์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” jsx๊ฐ€ ๋“ค์–ด์žˆ๋Š” return๋ฌธ์ด ๋๋‚˜๊ณ  ์‹คํ–‰๋œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ˜์†”์„ ์ถ”๊ฐ€ํ•ด์„œ ํ™•์ธํ•ด๋ณด๋‹ˆ ๋‹ค์‹œ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋Š” return๋ฌธ์ด ๋จผ์ € ์‹คํ–‰๋˜๊ณ  useEffect์˜ ์ฝ˜์†”์ด ์ฐํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. co..

๋งˆ์ดํŽ˜์ด์ง€ ๋ฒ„๊ทธ, ์ •๋ณด ๋ณ€๊ฒฝ ํ™•์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๐Ÿค”
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 21. 22:15

Today, What I learned ํŠœํ„ฐ๋‹˜์˜ ์ƒ์„ธํ•œ!.. ๊ฑฐ์˜ ์ „์ˆ˜ ํ…Œ์ŠคํŠธ ๊ธ‰์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ.. ๋ฒ„๊ทธ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด ๋ณธ๋‹ค. ํ˜„์žฌ ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ ๋งˆ์ดํŽ˜์ด์ง€์—๋Š” ์ด๋Ÿฐ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค. ๊ธฐ์กด ์œ ์ € ์ •๋ณด์™€ ๋‹ฌ๋ผ์กŒ์„ ๋•Œ๋งŒ ๋ฒ„ํŠผ์„ ํ™œ์„ฑํ™”์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๊ทธ ๋ถ€๋ถ„์„ ๋นผ๋จน์–ด์„œ.. ์ˆ˜์ •ํ–ˆ๋Š๋ƒ์˜ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ๊ณ„์†ํ•ด์„œ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์˜€๋‹ค!!... ((OMG)) ์ด๋Ÿฐ ์˜๋ฏธ ์—†๋Š” ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๋ฅผ ๋ง‰๋Š” ์ผ์ด์•ผ๋ง๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋กœ์„œ ํ•ด์•ผ ํ•  ์ผ... ๐Ÿ˜‡ State ์ถ”๊ฐ€ํ•˜๊ธฐ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ ์ €์žฅ๋œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ state๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์—ˆ๋‹ค. const [defaultUserInfo, setDefaultUserInfo] = useState(defaultInfo); ์ข€ ์—ฌ..

[React] React.lazy ์™€ Suspense
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 20. 23:31

Today, What I learned? ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜์–ด ์žˆ๋Š” ์ฝ”๋“œ๋ถ„ํ• ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค. ๋‚ด๊ฐ€ ์ ์šฉํ•œ ๋ถ€๋ถ„์ด ์•„๋‹ˆ์—ˆ๊ณ , ๋‚˜๋„ ์ฒ˜์Œ ์ ‘ํ•œ ๊ฒƒ์ด๋ผ ์•„์ง ์ƒ์†Œํ•œ ๋ถ€๋ถ„!... ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์—๋„ ์ด ๋ถ€๋ถ„์ด ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. https://ko.reactjs.org/docs/code-splitting.html ์ฝ”๋“œ ๋ถ„ํ•  – React A JavaScript library for building user interfaces ko.reactjs.org ์ฝ”๋“œ ๋ถ„ํ• ์€ ์•ฑ์„ ์ง€์—ฐ๋กœ๋”ฉ(lazy loading) ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ์— ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ค๊ณ , ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋งŽ์€ ๋„์›€์ด ๋œ๋‹ค. React.lazy React.lazy ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ..

[React] ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ์—ฌ์ •(2) - 3์ค‘ ์ค‘์ฒฉ ๊ฐ์ฒด
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 17. 21:53

Today, What I learned? ์ง€๋‚œ ๊ธ€์ด ๊ธธ์–ด์ ธ์„œ ์ด์–ด์„œ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ์—ฌ์ •~ ์˜ค๋Š˜์€ 3์ค‘ ์ค‘์ฒฉ ๊ฐ์ฒด์˜ ๊ฐ’์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ๊ธฐ๋กํ•œ๋‹ค. ์—ฌํƒœ๊ป.. ์ค‘์ฒฉ ๊ฐ์ฒด๊นŒ์ง„ ๊ฒช์–ด๋ดค์ง€๋งŒ 3์ค‘์œผ๋กœ ์ค‘์ฒฉ๋œ.. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ค‘์ฒฉ์˜ ์ค‘์ฒฉ์˜ ์ค‘์ฒฉ ๊ฐ์ฒด๋Š” ์ฒ˜์Œ์ด๋ผ ์‚ฝ์งˆ์„ ์ข€ ํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ Promise ๋ฐฐ์—ด๋ณด๋‹จ ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•จ ใ…Ž ์ผ๋‹จ ์ตœ์ข…๋ณธ์€ ์ด๋ ‡๋‹ค. ๊ธฐ์œ ๋งˆ์Œ์œผ๋กœ gif๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค ^^.. ์ด ๋…€์„์€ 3 ์ค‘์ฒฉ ๊ฐ์ฒด ์ง€์›ํ•œ, ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ์•„์ด๋””๋กœ ๋ฌธ์„œ(๊ฐ์ฒด)๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ , ๊ทธ ์•ˆ ๊ฐ์ฒด์˜ recruited ๋ผ๋Š” ํ‚ค๊ฐ’์„ ํ†ตํ•ด ํŒ๋ณ„๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ true/false์— ๋”ฐ๋ผ ๊ฐˆ๋ฆฐ๋‹ค. appliedProjects๋ผ๋Š” ๊ฐ์ฒด ์•ˆ์˜ ๊ฐ ๋ฌธ์„œ ์•„์ด๋””๋ผ๋Š” ๊ฐ์ฒด ์•ˆ์˜ recruite..

[React] ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ์—ฌ์ •(1) - Promise.all
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 16. 22:25

Today, What I learned? ๋งˆ์ดํŽ˜์ด์ง€์˜ ํ•ด๋‹น ์œ ์ € ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ธด ์—ฌ์ •.... ๋‚˜๋ฅผ ๋น™๊ธ€ ๋Œ์•„๋ฒ„๋ฆฌ๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ Promise์™€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ Promise.all์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. ๋ฐœ๋‹จ, Promise ๋ฐฐ์—ด ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์กฐ๊ธˆ ๋ณต์žกํ•œ ํŽธ์ธ๋ฐ.. ๋งˆ์ดํŽ˜์ด์ง€์—์„œ์˜ ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ๋Š” ํ™œ์„ฑํ™”๋œ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฐ๋ผ์„œ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋“ค์„ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์ง€์›ํ•œ ํ”„๋กœ์ ํŠธ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์‹.. ๋ญ ์—ฌ๊ธฐ๊นŒ์ง€์•ผ ๋ณดํ†ต์˜ ํ•„ํ„ฐ๋ง์ด์ง€ ์•Š๋‚˜? ์‹ถ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ป์–ด์˜จ ๊ฐ๊ฐ์˜ ๋ฌธ์„œ์•„์ด๋”” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ๊ฐ์˜ ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š”.. ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ์™œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ด๋Ÿฐ๊ฐ€์š”?๋ผ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ์šฐ๋ฆฌ ํŒ€์€ ๋ชจ๋‘ ํ”„..

[React] ์ปค์Šคํ…€ ๋ชจ๋‹ฌ ๋งŒ๋“ค๊ธฐ
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 15. 23:30

Today, What I learned? ํ”„๋กœ์ ํŠธ์˜ ๊ณต์šฉ ๋ชจ๋‹ฌ์„ ํ™œ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๐Ÿ‘€ ๊ทธ๋ž˜๋„ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ๋ผ ๋˜ ๋‹ค๋ฅธ ์ปค์Šคํ…€ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋”๋ถˆ์–ด ๊ณต์šฉ ๋ชจ๋‹ฌ์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„์ง€?? ์ง€๋‚œ ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฉ‹์ง€๊ฒŒ ๊ตฌํ˜„ํ•ด ์ค€ ํŒ€์› ๋ถ„์ด ์žˆ์–ด์„œ!.. ๋งŽ์ด ๋ฐฐ์› ๋‹ค ๐Ÿ˜‡ ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ๋ชจ๋‹ฌ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณธ๋‹ค. useModal hook ๋ชจ๋‹ฌ์„ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ๋ ค๋ฉด ์ผ๋‹จ ๋ชจ๋‹ฌ์ด ์—ด๋ฆฌ๊ณ  ๋‹ซํžˆ๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๋ณดํ†ต ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ชจ๋‹ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ฃผ๋Š” ํ•จ์ˆ˜ ๊ฐ™์€ ๊ฒƒ์„ ๋งŒ๋“ค์–ด์ฃผ์–ด ๊ด€๋ฆฌํ•œ๋‹ค. ๋˜ ์—ฌ๊ธฐ์— onClick ์ด๋ฒคํŠธ๋‚˜ onChange ์ด๋ฒคํŠธ์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค. const useModal = (initial..

[React] input type = 'radio', 'checkbox'์˜ ์ƒํƒœ๊ด€๋ฆฌ
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 14. 11:31

Today, What I learned? ๋ผ๋””์˜ค ๋ฒ„ํŠผ๊ณผ ์ฒดํฌ๋ฐ•์Šค์˜ ์ƒํƒœ ์œ ์ง€๋ฅผ ์œ„ํ•œ ๊ณ ๋ฏผ์˜ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด ๋ณธ๋‹ค!.. ๋‹จ์ˆœํžˆ ๊ฐ’์„ ๋„ฃ์–ด state๋ฅผ ๋ณ€๊ฒฝํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด์ „ ์ƒํƒœ ์Šค๋ƒ…์ƒท์„ ์ด์šฉํ•ด์„œ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋กœ์ง์„ ์จ๋ณด๊ฒŒ ๋˜์–ด ์ข‹์•˜๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ๋ผ๋””์˜ค ๋ฒ„ํŠผ const [isJuniorChecked, setIsJuniorChecked] = useState( user?.isJunior, ); const [checkedPositions, setCheckedPositions] = useState( user?.positions, ); ๋ผ๋””์˜ค ๋ฒ„ํŠผ์— ๋“ค์–ด๊ฐˆ onChange ์ด๋ฒคํŠธ. const handleCheckedRadioChange = useCallback( (e: React.ChangeE..

[Project Detto] ๊ธฐ์ˆ  ์Šคํƒ ์ค‘๋ณต ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 10. 23:29

Today, What I learned? ๋งˆ์ดํŽ˜์ด์ง€ ๊ตฌํ˜„ ์ค‘!.. ๋งˆ์ดํŽ˜์ด์ง€ ์ ‘์† ์‹œ ๊ฐ€์ ธ์˜ค๋Š” ์œ ์ € ์ •๋ณด๋ฅผ ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์ˆ  ์Šคํƒ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ธ๋“ค๋งํ•˜๋˜ ์ค‘์— ๋ง‰ํžˆ๊ณ  ๋ง์•˜๋‹ค. ๊ฐœ๋ฐœ ๊ธฐ์ˆ ์Šคํƒ์€ ์ž˜ ๋‚˜์˜ค๊ณ  ์žˆ์ง€๋งŒ ํฌ์ง€์…˜๊ณผ ์ƒ๊ด€ ์—†์ด ๊ธฐํš, ๋””์ž์ธ ๋ถ€๋ถ„์ด ์ค‘๋ณต๋˜์–ด ๋‚˜ํƒ€๋‚ฌ๊ธฐ ๋•Œ๋ฌธ..๐Ÿ˜จ๐Ÿ˜จ๐Ÿ˜จ (NOOOOOooo...) ์œ„ ์‚ฌ์ง„์—์„œ๋Š” ์ž˜๋ ธ์ง€๋งŒ ๋””์ž์ธ, ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ์„ ํƒ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์˜€๋‹ค. ์›ํ•˜๋Š” ๋Œ€๋กœ ๋˜๋ ค๋ฉด ์œ ์ €์˜ ์„ ํƒ๋œ ํฌ์ง€์…˜์— ๋”ฐ๋ผ์„œ ๊ตฌ๋ถ„๋  ํ•„์š”๊ฐ€ ์žˆ๊ณ , ์œ ์ €๊ฐ€ ๊ธฐํš์ด๋‚˜ ๋””์ž์ธ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ํฌ์ง€์…˜์˜ ์Šคํƒ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค!.. ๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. {skills.map((skill: string) \=> { const isChecked \= checkedSkills?.inc..

[React] input radio, checkbox ์ปค์Šคํ…€ํ•˜๊ธฐ with Styled-components
๐Ÿ“” Studying/๐Ÿ’Œ TIL 2023. 2. 8. 22:28

Today, What I learned? UI๋ฅผ ๋จผ์ € ์ž‘์—…ํ•˜๋ฉด์„œ input ํƒœ๊ทธ ์ค‘ ์ฒดํฌ๋ฐ•์Šค์™€ ๋ผ๋””์˜ค๋ฒ„ํŠผ์„ ์ปค์Šคํ…€ํ•ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์žกํ˜€์žˆ๋Š” UI๋ฅผ ๋‚ ๋ฆฌ๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๋””์ž์ธ๋Œ€๋กœ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์‚ฝ์งˆ ์‹œ๊ฐ„์ด ์ข€ ๊ธธ์—ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ ์ปค์Šคํ…€์— ์„ฑ๊ณตํ–ˆ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๋†“์•˜๋Š”์ง€ ๊ธฐ๋กํ•ด๋ณด๋ ค ํ•œ๋‹ค!.. ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ชจ์…˜์„ ์“ฐ๊ณ  ์žˆ์ง€๋งŒ Styled-components ํ˜•์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋Š” ์ .. input type='radio' ์™„์„ฑ๋œ ๋ชจ์Šต์€ ์ด๋ ‡๋‹ค. ์–ด๋–ป๊ฒŒ ์ปค์Šคํ…€์„ ํ•  ๊ฒƒ์ด๋ƒ? ๋ผ๋ฒจ์˜ htmlFor์™€ ์ธํ’‹์˜ name์ด ๋™์ผํ•  ๊ฒฝ์šฐ ๋ผ๋ฒจ์„ ๋ˆ„๋ฅด๊ธฐ๋งŒ ํ•ด๋„ ์ธํ’‹์ด ๋™์ž‘๋œ๋‹ค๋Š” ์ ์„ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค. {career.map((career) => ( {career.name} ))} ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€..