useRef()
1. ๊ฐ์
์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ฉํ ๋ ํน์ DOM์ ์ ๊ทผํ๊ธฐ ์ํด์๋ getElementById
, querySelector
์ ๊ฐ์ DOM Selector ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฆฌ์กํธ์์๋ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก DOM์ ์ ๊ทผํ ์ ์์๊น? ๋ฐ๋ก useRef()
ํ
์ ์ด์ฉํ๋ฉด ๋๋ค.
2. useRef() ๋ก ํน์ DOM ์ ํํ๊ธฐ
๋จผ์ useRef()
๋ฅผ ์ฌ์ฉํ์ฌ ํน์ DOM์ ์ ํํ์. ์ฐ์ ์ ์ผ๋ก ํ ์ผ์ useRef()
๋ฅผ ๋ฆฌ์กํธ์์ ์ํฌํธํ ํ Ref ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ผ์ด๋ค. ๊ทธ ํ Ref ๊ฐ์ฒด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ ํํ๊ณ ์ถ์ DOM์ ref
๊ฐ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
์๋์ ์์๋ฅผ ํจ๊ป ๋ณด์.
useRef()
๋ฅผ ํตํด ๋๊ฐ์ Ref ๊ฐ์ฒด๋ฅผ ๋ง๋ค์๋ค. ํ๋๋ nameRef
์ด๊ณ ๋ค๋ฅธ ํ๋๋ emailRef
์ด๋ค. ๊ทธ ํ ๊ฐ๊ฐ input์ ref
๊ฐ์ผ๋ก ์ค์ ํ๋ค. ์ฝ์๋ก ์ด๋ค ๋ด์ฉ์ด ์ฐํ๋์ง ๋ณด์.
Ref ๊ฐ์ฒด์ .current
๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ DOM๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ข ๋ ๋์๊ฐ input์์ ์์นํ ๋ฒํผ์ ๋๋ฅผ ๋ ๊ฐ๊ฐ์ input์ focus๋ฅผ ์ฃผ๋๋ก ํด๋ณด์. ๊ทธ๋ ๋ค๋ฉด ์๋์ ์ถ๊ฐ์ ์ธ ์ฝ๋(๋ฒํผ์ onClick) ์์ฑ์ด ํ์ํ๋ค.
.current.focus()
์ ํตํด input์ focus๋ฅผ ์ค ์ ์๋ค. ํด๋ฆญ์ ํตํด ํ์ธํด ๋ณด๋ฉด ์๋์ ์ฌ์ง๊ณผ ๊ฐ๋ค. ์๋๋ email focus
๋ฒํผ์ ๋๋ ์ ๋์ ๋ชจ์ต์ด๋ค.
3. useRef() ๋ก ๋ณ์ ๊ด๋ฆฌํ๊ธฐ
useRef()
๋ DOM๋ฅผ ์ ํํ๋ ์ฉ๋ ์ธ์๋, ์ปดํฌ๋ํธ ์์์ ์กฐํ ๋ฐ ์์ ํ ์ ์๋ ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ useState()
๋ก ์ ์ธ๋ ๋ณ์(๋ฐ์ดํฐ)๊ฐ ๋ณํ ๋ ๋ง๋ค ๋ฆฌ๋๋๋ง์ ํ๊ฒ ๋๋ฉด์ ์ปดํฌ๋ํธ ๋ด๋ถ ๋ณ์๋ค์ด ์ด๊ธฐํ๋๋ค. ์๋์ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํด๋ณด์.
๋ณ์ number
๋ var
๋ฅผ ํตํด ์ ์ธ์ด ๋์๊ณ ์๋ฌด๋ฆฌ +๋ฒํผ์ ๋๋ฅธ๋ค ํด๋ ํ๋ฉด์ด ๋ค์ ๋๋๋ง์ด ๋์ง๋ ์๋๋ค. ํ์ง๋ง ์ฝ์์ ์ฐ์์ ๋ ์ฝ๋ ๋ด๋ถ์์๋ ์ซ์๊ฐ ํ๋์ฉ ์ค๋ฅด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ ์๋์ ๋๋๋ง ๋ฒํผ์ ๋๋ ์ ๋ ์ด๋จ๊น? number
์ ๊ฐ์ด ์ด๊ธฐํ ๋์ด ๋ค์ 0์ด ๋๋ค.
์ด๋ฒ์๋ var
๊ฐ ์๋ useRef()
๋ฅผ ํตํด ๋ณ์๋ฅผ ๊ด๋ฆฌํด๋ณด์. ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํ์.
์์ ๊ฐ์ด var
๋ก ์ ์ธํ number
๋ฅผ useRef()
๋ก ๋ฐ๊พธ์๊ณ useRef()
์ ()์์ ํ๋ผ๋ฏธํฐ๋ก 0์ ๋ฃ์ด ์ด๊ธฐ๊ฐ์ ์ค์ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ number.current
๋ฅผ ํตํด ๊ฐ์ ์กฐํํ๋ค. ๋ํ +๋ฒํผ์ ๋๋ฅผ ๋ ๋ง๋ค number.current
์ ๊ฐ์ ์์ ํ์ฌ 1์ฉ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฒ ํ์๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ์๋์ ์ฌ์ง๊ณผ ๊ฐ๋ค.
์ด์ var
๋ก ์ ์ธํ์ ๋ ์ฒ๋ผ +๋ฒํผ์ ๋๋ฅผ ๋ number
๊ฐ์ด 1์ฉ ์ฆ๊ฐํ์ง๋ง ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง ๋์์ ๋ ์ด์ ๊ณผ ๋ค๋ฅด๊ฒ number
๊ฐ์ด 0์ผ๋ก ์ด๊ธฐํ๊ฐ ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ํ๋์ ์ฌ์ค์ useRef()
๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ด ๋ณํ๋๋ผ๊ณ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ์์ ์ฌ์ง์์๋ Number: 8
์ด๋ผ๊ณ ๋์ด์์ง๋ง ์ด๋ ๋๋๋ง ๋ฒํผ์ผ๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง์ด ๋์๊ธฐ ๋๋ฌธ์ด๊ณ ๊ทธ ์ ๊น์ง๋ ์์ ๋ number
์ ๊ฐ์ ํ๋ฉด์์๋ ๋ณผ ์ ์๋ค. ์๋์ ์ฌ์ง์ ์ฐธ๊ณ ํ๋ผ!
4. Conclusion
useRef()
๋ฅผ ํตํด DOM์ ์ง์ ์ ๊ทผํ๊ณ ์์ ํ๋ ๊ณผ์ ์ ํนํinput
๋ฅผ ๋ค๋ฃฐ ๋ ๋ช ๋ฒ ์ฌ์ฉํ์๋ค. ํ์ง๋งuseRef()
๋ฅผ ํตํด ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ํ ๋ฒ๋ ํด๋ณด์ง ๋ชปํ์๋ค.var
๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ๊ณผ์ ์ฐจ์ด๋ ์ดํด๊ฐ ๋์ง๋ง ์ด๋ค ๊ธฐ๋ฅ์์useRef()
๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํด์๋ ์์ง ์๋ฌธ์ด๋ค. ๊ตฌ์ฒด์ ์ธ ์์์useRef()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ์ฅ์ ์ ๋ํด ์์๋ณด๊ณ ์ถ๋ค.(์ดํ ๊ณต๋ถํ๋ค๊ฐ ํด๋น ๋ด์ฉ์ด ๋์ค๋ฉดuseRef()
์ฑํฐ์ ์ ๋ฆฌ๋ฅผ ํด์ผ๊ฒ ๋ค.)
์ฐธ๊ณ
ko.reactjs.org - useRef 10. useRef ๋ก ํน์ DOM ์ ํํ๊ธฐ [React] useRef ์ฌ์ฉ๋ฒ ๋ฐ ์์
๐ 2022-08-01
Last updated