๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WEB32

Ref๋ฅผ ์ข€ ๋” ์ž˜ ์จ๋ณผ๊นŒ? (forwardRef์™€ useImperativeHandle) ๋“ค์–ด๊ฐ€๋ฉฐ: React์˜ Ref ์ „๋‹ฌ ๋ฌธ์ œ React์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ref๋ฅผ ์ „๋‹ฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.// ๐Ÿšจ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œconst Input = (props) => { return ;};// ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธconst Parent = () => { const inputRef = useRef(null); return ; // ref๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ};์ด๋Š” React๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ref๋ฅผ ์ผ๋ฐ˜ prop์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ œํ•œ์ด ์žˆ๋Š” ์ด์œ ๋Š”:1. ์บก์Šํ™” ์œ ์ง€: ๋‚ด๋ถ€ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ๋ณดํ˜ธ2. ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ณด์žฅ3. ๋ถˆํ•„์š”ํ•œ ๋…ธ์ถœ ๋ฐฉ์ง€ forwardRef: React์˜ ๊ณต์‹์ ์ธ ref ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜React ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด, `forwardRef`๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ .. 2024. 6. 28.
๋„ˆ setTimeout, setInterval ๋กœ ์‹œ๊ฐ„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด? ์–ด๋–ป๊ฒŒ? ํƒ€์ด๋จธ๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ค๊ฐ€ ๋ฌธ๋“ ๊ทธ๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์•„๋ฌด ์ƒ๊ฐ ์—†์ด setTimeout ๊ณผ setInterval์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–˜๋„ค๋Š” ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”๊ฑฐ์ง€? ์–˜๋„ค๋ฅผ ๋ฏฟ๊ณ  ์จ๋„๋˜๋Š”๊ฑด๊ฐ€? ๊ณผ์—ฐ setTimeout๊ณผ setInterval์ด ์‹œ๊ฐ„์„ ๋ณด์žฅํ•ด์ฃผ๋Š” ๊ฒŒ ๋งž๋‚˜? ๊ทธ๋ž˜์„œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋๋‹ค. ๐Ÿ‘€TL; DR setTimeout, setInterval์˜ ์ฐจ์ด์  ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๋ณด์žฅ๋˜๋‚˜? ์‹œ๊ฐ„์„ ์ธก์ •ํ•ด์•ผ๋˜๋Š” ํƒ€์ด๋จธ๋ผ๋ฉด Date๊ฐ€ ํ•ด๊ฒฐ์ฑ…์ด ๋ ์ˆ˜๋„..? setTimeout ์ง€์ •ํ•ด์ค€ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— 1ํšŒ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋น„๋™๊ธฐ ํ•จ์ˆ˜ setTimeout์ด ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” JS์—”์ง„์ด ์•„๋‹ˆ๋ผ WebAPI์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ธ JS์—์„œ ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค. setInterval ์ง€์ •ํ•ด.. 2024. 1. 16.
styled-components๋ฌด์ƒˆ์˜ tailwind CSS ๋„์ž…๊ธฐ - 1 ๐Ÿ‘€TL; DR ์›๋ž˜๋Š” styled-components๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋””์ž์ธ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ํ•˜๋ฉฐ styled-components์˜ ํ•œ๊ณ„๋ฅผ ๋Š๊ผˆ๋‹ค. tailwind CSS๋ฅผ ๋„์ž…ํ–ˆ๋‹ค. ์•„์ง์€ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค.. tailwind CSS๋ฅผ '์ž˜ ์“ฐ๋Š”' ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰์ค‘์ด๋‹ค styled-components๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ด์œ  ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ด์œ ๋Š” '์ปดํฌ๋„ŒํŠธํ™”'์— ์žˆ์—ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธํ™”ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋ฉด์„œ ๋ช…ํ™•ํžˆ ํ•ด๋‹น ํƒœ๊ทธ์˜ ์—ญํ• ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค๋Š” ์ ๋„ ์ข‹์•˜๋‹ค. ์ด ์ ์€ ๋ฒ„๊ทธ ํ”ฝ์‹ฑ์—๋„ ๊ต‰์žฅํžˆ ๊ฐ„ํŽธํ•จ์„ ๋Š๋ผ๊ฒŒ ํ•ด์คฌ๋‹ค. (๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ๋Š” ๋ถ€๋ถ„์—์„œ ๋ช…์‹œ์„ฑ์˜ ์žฅ์ ) ๊ทธ๋ฆฌ๊ณ  props๋กœ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์˜ ์žฅ์ ๋„ ๋งค์šฐ ์ข‹์•˜๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ‰๊น”๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ดค๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ.. 2024. 1. 8.
๊ณผ์—ฐ ๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ์›น ์ ‘๊ทผ์„ฑ์ธ๊ฐ€ 11์›” 7์ผ์— ์›น ์ ‘๊ทผ์„ฑ์— ๋Œ€ํ•œ ๊ฐ•์—ฐ์„ ๋“ฃ๊ณ  ์™”๋‹ค. ์ง„์งœ ๋งŽ์€ ๊ฑธ ์–ป์—ˆ๋˜ ๊ฐ•์˜์˜€๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚˜๋Š” ์• ์ดˆ์— ์ž˜๋ชป ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ๊ฐœ๋…์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฐฝํ”ผํ•˜์ง€๋งŒ, ์ •๋ณด ์ ‘๊ทผ์„ฑ์ด๋ผ๋Š” ๋ง์— ๋ณด์•ˆ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๋‚˜๋Š” ๋จธ๋ฆฌ๋ฅผ ๋Œ•~~ ๋งž์•˜๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— ์ž˜๋ชป๋œ ์ง€์‹์„ ๋ฐ”๋กœ ์žก์„ ์ˆ˜ ์žˆ์–ด์„œ ๋„ˆ๋ฌด ์ข‹์•˜๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์€ ๊ฐ•์—ฐ์„ ๋“ค์œผ๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค. ๋‚˜์ฒ˜๋Ÿผ '์›น ์ ‘๊ทผ์„ฑ'์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅธ๋‹ค๊ฑฐ๋‚˜, ๋“ค์–ด๋งŒ ๋ณธ ์‚ฌ๋žŒ์ด ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋งŒ์•ฝ, ์ ‘๊ทผ์„ฑ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์•„๋ž˜ ์งˆ๋ฌธ์— ํ•œ ๋ฒˆ ๋‹ตํ•ด๋ณด๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ์ ‘๊ทผ์„ฑ์— ์–ด๋Š์ •๋„ ๊ฐ€์น˜๋ฅผ ๋‘๋Š”๊ฐ€? ์ ‘๊ทผ์„ฑ์˜ ์ค‘์š”์„ฑ๊ณผ ํ•„์š”์„ฑ์„ ์•„๋Š”์ง€ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋‚ด๊ฐ€ ๋งŒ๋“  ์„œ๋น„์Šค๋ฅผ ์žฅ์• ์ธ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ, ์–ด.. 2023. 11. 22.
[โ˜„๏ธํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] useEffect ๋‚ด setState ๋ฌดํ•œ๋ฃจํ”„ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ์—†๋˜ ์ฝ”๋“œ์— ์ด๋ฒˆ์— border๋ฅผ linear๋กœ ๋ฐ”๊พธ๋ฉด์„œ setํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋‘๊ฐœ ๋„ฃ์–ด์ฃผ๋‹ค๋ณด๋‹ˆ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. # ์›๋ž˜ ์ฝ”๋“œ useEffect(() => { if (isPost.data?.isAllSeen == false) { for (let i = 0; i < isPost.data?.seenPostList.length; i++) { if (isPost.data?.seenPostList[i].isSeen == false) { if (isPost.data?.seenPostList[i].isPublic == true) { setBorderColor(['#6935FD', '#9747FF']); setIndex(i); break; } if (isPost.data?.seenPostList[i].is.. 2023. 10. 5.
react-query๋ฅผ ์งง๊ฒŒ ์‚ฌ์šฉํ•ด๋ณธ ํšŒ๊ณ ..๋ž„๊นŒ...? ์ง€๊ธˆ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ react-query์™€ recoil์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ ์žˆ๋‹ค. ๋ฌผ๋ก  ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„์ง ๋๋‚˜์ง€ ์•Š์•˜๋‹คใ…Žใ…Ž.. ์‚ฌ์‹ค ์ž‘๋…„๊นŒ์ง€๋งŒ ํ•ด๋„ ์ฑ„์šฉ๊ณต๊ณ ๋‚˜ ๊ทธ๋Ÿฐ ๊ณณ๋“ค์— Redux๊ฐ€ ๊ฐ€๋“์ฐผ์—ˆ๋Š”๋ฐ ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ด๊ฐ€ React-Query์˜ ์ ์œ ์œจ์ด ๋†’์•„์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ณต๋ถ€ํ•ด์•ผ์ง€..ํ•ด์•ผ์ง€..์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ์šฐ์—ฐํžˆ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด์„œ ํ•ด์•ผ๋งŒํ•˜๊ฒŒ ๋๋‹ค.. ๋ฆฌ์ฝ”์ผ์€ ์ด์ „์— ํ•™์Šตํ•ด๋ดค๋Š”๋ฐ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋Š” ์•ˆํ•ด๋ด์„œ ์‚ด์ง ๊ฒ์ด ๋‚ฌ์—ˆ๋‹ค ๊ทผ๋ฐ ์ง€๊ธˆ ํ•ด๋ณด๋‹ˆ ์ ์šฉํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ๋Š” ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์œผ๋‹ˆ ๋‚˜์ฒ˜๋Ÿผ ๊ฒ๋จน์€ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ผ๋‹จ ํ•ด๋ณด๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ๋‹ค. ์ผ๋‹จ ๋„๋Œ€์ฒด ์š”์ฆ˜ ์™œ ๋‹ค ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ๋“ค์—ˆ์—ˆ๋‹ค. ์ดํ•ดํ•ด๋ณด๋ ค๊ณ  ์ž๋ฃŒ๋ฅผ ๋งŽ์ด ์ฐพ์•„๋ดค๋Š”๋ฐ ์ž๋ฃŒ๋„ ์ž๋ฃŒ์ง€๋งŒ ์ง์ ‘.. 2023. 4. 4.
๋ฐ˜์‘ํ˜•