Library/React

github.com/radix-ui/react-useControllableState ์†Œ์Šค์ฝ”๋“œ primitives/packages/react/use-controllable-state/src/useControllableState.tsx at main · radix-ui/primitivesRadix Primitives is an open-source UI component library for building high-quality, accessible design systems and web apps. Maintained by @workos. - radix-ui/primitivesgithub.com  ๐Ÿ•น๏ธ useControllableState() ๋ž€?Radix ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” React ํ›…์œผ๋กœ, ์ œ..
์ƒ๋‹จ ๋‚ด์šฉ ์ž‘์„ฑ ์˜ˆ์ •  ( 2025-01-31 ~ ) 2025. 02. 02 ์ถ”๊ฐ€โˆ™ useControllableState() ๊ณต๋ถ€โˆ™ ReactNode, ReactChild, ReactElement ๊ณต๋ถ€ ํ›„, ์žฌ์ž‘์„ฑ ๋  ์˜ˆ์ • (์•„๋งˆ ์ฝ”๋“œ ๋˜ํ•œ ๋ณ€๊ฒฝ๋  ์˜ˆ์ •)   ํ•ฉ์„ฑ ์ปดํฌ๋„ŒํŠธ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค 1. Header, Body, Footer๋ฅผ ๋ชจ๋‘ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ2. Body์™€ Footer๋งŒ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ3. Body๋งŒ ํ˜ธ์ถœํ•˜๊ณ  Body์— ์Šคํƒ€์ผ๋ง์„ ๋ฎ์–ด์”Œ์šด ๊ฒฝ์šฐ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ์„ ํ˜ธ์ถœํ•จ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ชจ์–‘์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.๋˜ํ•œ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— className(tailwindCSS), style์„ props๋กœ ๋„˜๊ฒจ์ฃผ์–ด ๋””์ž์ธ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“„ App.tsx (ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŽผ์ณ์„œ ๋ณด๊ธฐ)๋”๋ณด๊ธฐim..
์ฐธ๊ณ ์‚ฌ์ดํŠธ• ์นด์นด์˜ค - FE ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ / ์ปดํฌ๋„ŒํŠธ ์ถ”์ƒํ™”• velog - jinoo.io / ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ ˆ๊ณ ์ฒ˜๋Ÿผ ์Œ“์•„๋ณด์ž!  *์ถ”์ƒํ™”: ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‚ฌ๋ฌผ์ด๋‚˜ ๊ฐœ๋…์—์„œ ๊ณตํ†ต๋˜๋Š” ํŠน์„ฑ์ด๋‚˜ ์†์„ฑ ๋”ฐ์œ„๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŒŒ์•…ํ•˜๋Š” ์ž‘์šฉ  ๐Ÿ’€ ์ปดํฌ๋„ŒํŠธ์˜ ์ถ”์ƒํ™”ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ(ํ˜น์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค.์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๊ฐœ๋ฐœ๋กœ ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ? ๐Ÿ‘๐Ÿป ์žฅ์ 1. ์žฌ์‚ฌ์šฉ์„ฑ: ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋Š” ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค.2. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ: ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๊ธฐ๋Šฅ์ด๋‚˜ UI ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋œ๋‹ค.์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ..
"๐Ÿก ๋ณด๊ธฐ ์ข‹์€ ๋–ก์ด ๋จน๊ธฐ๋„ ์ข‹๋‹ค"์‚ฌ๋žŒ์˜ ์˜ค๊ฐ ์ค‘ ๊ฐ€์žฅ ๋ฐœ๋‹ฌํ•œ ๊ฐ๊ฐ์ด ์‹œ๊ฐ์ด๋ผ๊ณ ํ•œ๋‹ค.์™ธ๋ถ€ ์ž๊ทน์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ๊ฐ€์žฅ ๋ฏผ๊ฐํ•˜๊ณ  ๋น ๋ฅธ ๊ฐ๊ฐ์ด๊ธฐ๋„ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.์œ„ ์†๋‹ด์ด ๊ดœํžˆ ์žˆ๋Š” ๋ง์ด ์•„๋‹ˆ๋ฉฐ, ์ž‘์ž๋Š” ์š”๋ฆฌ๋ฅผ ์ทจ๋ฏธ๋กœ ํ•˜๋ฉด์„œ ํ”Œ๋ ˆ์ดํŒ…์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.๊ธฐ๋Šฅ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ๋””์ž์ธ ๋˜ํ•œ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด ๋””์ž์ธ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ๋˜ํ•œ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค. ์ „์ฒด์ ์ธ ๋””์ž์ธ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ์ž‘ํ•˜๊ฒŒ ๋ ํ…๋ฐ ์ด๋•Œ, ์œ ์šฉํ•œ Headless UI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.  ๐Ÿค• HeadlessHeadless๋ž€, ๋””์ž์ธ ์—†์ด ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.์ ‘๊ทผ์„ฑ, ์ƒํƒœ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šคํƒ€์ผ์„ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋‹ค. `MUI`, `Bootstrap` ๋“ฑ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ..
์ฐธ๊ณ ์‚ฌ์ดํŠธ* ์นด์นด์˜ค FE ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์•„ํ† ๋ฏน ๋””์ž์ธ์„ ํ™œ์šฉํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋„์ž…๊ธฐ | ์นด์นด์˜ค์—”ํ„ฐํ…Œ์ธ๋จผํŠธ FE ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ์ •ํ˜ธ์ผ(harry) ์นด์นด์˜คํŽ˜์ด์ง€์—์„œ ์›น ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘๋ณด๋‹ค ๋ฐ–์— ๋Œ์•„๋‹ค๋‹ˆ๋Š” ๊ฑธ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.fe-developers.kakaoent.comํ•ด๋‹น ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋จธ๋ฆฟ์†์— ๋‹ด๊ธฐ ์œ„ํ•ด ์ ์–ด๊ฐ€๋ฉด์„œ ๊ณต๋ถ€ (๋„์ .. ๋„์ ..)  ๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ์˜ ํŒŒํŽธํ™”๋น„์Šทํ•œ ๋ชจ์–‘ ๋ฐ ๊ธฐ๋Šฅ์„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.์ด๊ฑธ ๊ฐ๊ธฐ ํ•˜๋‚˜ ํ•˜๋‚˜ ๋‹ค ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๊ตฌํ˜„ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ํŒŒํŽธํ™”๋ผ๋Š” ์ œ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.๊ทธ๋Ÿผ ์œ ์ง€๋ณด์ˆ˜ ํ•  ๋•Œ, ๊ฐ๊ฐ์˜ ํŒŒํŽธํ™”๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ์•„์„œ ๊ณ ์ณ์•ผํ•˜๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค. โ“ ์™œ ์“ฐ๋Š”๊ฑด๋ฐ?๋””์ž์ธ ์‹œ์Šคํ…œ๋‚ด์—์„œ ์ˆ˜ ๋งŽ์€ ์ˆ˜์ • ์ž‘์—…๋“ค์ด ์ผ์–ด๋‚œ..
์ฐธ๊ณ ์‚ฌ์ดํŠธ • ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ - Custom Hook โš™๏ธ Custom Hook ์•ž์„œ ๊ฒŒ์‹œ๊ธ€์—์„œ ๋‹ค์–‘ํ•œ Hook์„ ์‚ฌ์šฉํ•ด์™”๋‹ค. React์—๋Š” useState, useContext, useEffect์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋‚ด์žฅ Hook์ด ํ•จ๊ป˜ ์ œ๊ณต๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž๊ฐ€ ์˜จ๋ผ์ธ ์ƒํƒœ์ธ์ง€ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ์ฑ„ํŒ…๋ฐฉ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ๋ชฉ์ ์„ ์œ„ํ•ด Hook์ด ์žˆ์—ˆ์œผ๋ฉด ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. React์—์„œ ์ด๋Ÿฌํ•œ Hook์„ ๋ชจ๋‘ ์ง€์›ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ง์ ‘ ์ž์‹ ๋งŒ์˜ Hook์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๐Ÿง ์™œ ์‚ฌ์šฉํ• ๊นŒ? ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค. ๋‚ด์žฅ Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๐Ÿ“ก ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„ ๋…ผ๋ฆฌ ๊ณต์œ  ๋„คํŠธ์›Œํฌ์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” ์•ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์ž. ..
์ฐธ๊ณ ์‚ฌ์ดํŠธ • ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ - useContext ๐ŸŒ useContext useContext๋Š” ์ปดํฌ๋„ŒํŠธ์˜ Context๋ฅผ ์ฝ๊ณ  ๊ตฌ๋…ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฆฌ์•กํŠธ Hook์ด๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ’์„ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ํ˜ธ์ถœ ์‹œ, ๋ฐ์ดํ„ฐ prop์„ ๋‹ด๊ณ , ํ•ด๋‹น props๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. useContext๋Š” ํ•ด๋‹น ๊ณผ์ •์— ์ƒ๊ด€์—†์ด useContext๋กœ ๊ฐ์‹ผ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” recoil์ด ์žˆ๋‹ค. ๐Ÿ“ฆ Parameter useContext ์ปจํ…์ŠคํŠธ๋ฅผ ์ฝ๊ณ  ๊ตฌ๋…ํ•˜๋ ค๋ฉด ์ปดํฌ๋„ŒํŠธ ์ตœ์ƒ์œ„์—์„œ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค. const value = useContext(SomeContext); • SomeContext: ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋Š” cr..
์ฐธ๊ณ  ์‚ฌ์ดํŠธ • ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ - useCallback • ๋ณ„์ฝ”๋”ฉ๋‹˜์˜ youtube - useCallback ๊ฐ•์˜ ๐Ÿชฃ useCallback useCallback์€ ์žฌ๋ Œ๋”๋ง ์‚ฌ์ด์— ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” React Hook์ด๋‹ค. ๐Ÿ“ข ์ฐธ์กฐ useCallback ์žฌ๋ Œ๋”๋ง ์‚ฌ์ด์— ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์บ์‹œํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. const cachedFn = useCallback(fn, [dependencies]); ๐Ÿ“ฆ Parameters • fn: ์บ์‹œํ•˜๋ ค๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๊ณ  ๋ชจ๋“  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. React๋Š” ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์ค‘์— ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•œ๋‹ค(ํ˜ธ์ถœX). ๋‹ค์Œ ๋ Œ๋”๋ง์—์„œ dependencies๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ์ œ๊ณตํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ..
ma.caron_g
'Library/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก