Props์™€ State์™€ Ref

๐Ÿคต State์™€ Ref์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๐Ÿ™Ž ??? ๐Ÿคต ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ref์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋ ๊นŒ์š”?

2022-01-17์— ์”€

๐Ÿคต State์™€ Ref์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿ™Ž ???

๐Ÿคต ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ref์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋ ๊นŒ์š”?

1function MyComponent() {
2 const ref = useRef(3)
3 return <div>{ref.current}</div>
4}

Props

Props๋Š” Properties์˜ ์ค„์ž„์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์˜ต์…˜์ด๋‚˜ ์„ค์ •๊ณผ ๊ฐ™์€ ๊ฐ’์œผ๋กœ, ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋˜๋ฉฐ ๋ถˆ๋ณ€ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ๋Š” props ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋‚˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

State

State๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ƒ์„ฑ๋˜๊ณ , ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๋‹ค. ๋ณดํ†ต ์œ ์ € ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๋ณ€๊ฒฝ๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ state๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. state๋Š” privateํ•œ ๊ฐ’์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ state๋ฅผ ๊ผญ ๊ฐ€์ ธ์•ผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. state๋Š” ๋ณต์žก์„ฑ์„ ๋†’์ด๊ณ  ์˜ˆ์ธก๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถ”๋ฏ€๋กœ state๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Ref

render ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ DOM ๋…ธ๋“œ ํ˜น์€ React ์—˜๋ฆฌ๋จผํŠธ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๊ธฐ์ค€์œผ๋กœ,

์—˜๋ฆฌ๋จผํŠธ์— ref๋ฅผ ์ „๋‹ฌํ•˜๋ฉด, ๋…ธ๋“œ๋ฅผ ํ–ฅํ•œ ์ฐธ์กฐ๋Š” ref.current์— ๋‹ด๊ธด๋‹ค.

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useRef() hook API๋กœ ref์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

useRef()์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ref ๊ฐ์ฒด๋Š” DOM ref๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ref ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ์–ด๋–ค ๊ฐ’์ด๋“  ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ์ผ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. class์˜ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์™€ ์œ ์‚ฌํ•˜๋‹ค. ๊ทธ๋ž˜์„œ setInterval ๊ฐ™์€ ์ธํ„ฐ๋ฒŒ์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

1 const intervalRef = useRef();
2
3 useEffect(() => {
4 const id = setInterval(() => {
5 // ...
6 });
7 intervalRef.current = id;
8 return () => {
9 clearInterval(intervalRef.current);
10 };
11 });

useRef()๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ref ๊ฐ์ฒด๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ๋‹ค๋ฅธ ์ ์€, ref ๊ฐ์ฒด๋Š” ๋ Œ๋”๋ง์ด ๋˜์–ด๋„ ํ•ญ์ƒ ๋™์ผํ•œ ref ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. useRef()์€ ๊ทธ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ณ€๊ฒฝ๋œ ์‚ฌ์‹ค์„ ์•Œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ref.current ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์งˆ๋ฌธ์˜ ์ƒํ™ฉ์—์„œ๋Š” ๋ Œ๋”๋ง์ด ๋‹ค์‹œ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ •๋‹ต์ด๋‹ค.

๋ฒ„ํŠผ ํด๋ฆญ์„ ํ•ด๋„ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๊ฐ€ ๋Š˜์–ด๋‚˜์ง€ ์•Š์ง€๋งŒ, ์ฝ˜์†”์—๋Š” ๋ณ€๊ฒฝ๋œ ref.current ๊ฐ’์ด ๊ณ„์† ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋‹ค.

ํ”„๋กœํ•„ ์‚ฌ์ง„

์กฐ์˜ˆ์ง„

์ด์ „ ํฌ์ŠคํŠธ
JS03 - ๊ฐ์ฒด (1)
๋‹ค์Œ ํฌ์ŠคํŠธ
JS04 - ํ•จ์ˆ˜์™€ ์Šค์ฝ”ํ”„