๐ useRef๋ก DOM ์์ ์ ๊ทผ
Ref๋ฅผ ์ฌ์ฉํ๋ฉด DOM ์์์ ์ ๊ทผํ ์ ์๋๋ฐ, ์ด๋ Document querySelector()๊ณผ ๋น์ทํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
input ํ๊ทธ๋ก ์์ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
const App = () => {
return (
<div>
<input type = "text" placeholder="username"/>
<button>๋ก๊ทธ์ธ</button>
</div>
);
};
export default App;
input์ ํด๋ฆญํ๋ฉด input์ด ํ์ฑํ๋๋๋ฐ, ์ด ์ํ๋ฅผ input์ด focus ์ํ๊ฐ ๋์๋ค๊ณ ํฉ๋๋ค. focus๋ฅผ ์๋์ผ๋ก ์์ผ์ฃผ๋ ๋ก์ง์ ๊ตฌํํ๋ ค๋ฉด DOM ์์์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค. ์ด๋ฅผ useRef๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ก๊ทธ์ธ ํ์ด์ง์ ๋ค์ด๊ฐ์ ๋, input์ ํด๋ฆญํ์ง ์์๋ focus ์ํ๊ฐ ๋๋๋ก ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ref ์์ฑ
๋จผ์ , useRef๋ก inputRef๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ inputํ๊ทธ์ ref ์์ฑ์ผ๋ก inputRef๋ฅผ ์ฐธ์กฐํ๊ณ , useEffect๋ก inputRef ๊ฐ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
const App = () => {
const inputRef = useRef();
useEffect(() => {
console.log(inputRef);
}, []);
return (
<div>
<input ref={inputRef} type="text" placeholder="username" />
<button>๋ก๊ทธ์ธ</button>
</div>
);
};
export default App;
์ฝ์์ current ์์ input์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
console.log๋ฅผ ์ง์ฐ๊ณ inputRef.current๋ก ์ ๊ทผํด์ ๊ฐ๋จํ๊ฒ .focus()๋ฅผ ํ์ฉํ๋ฉด ์๋ก๊ณ ์นจ์ ํ์ ๋ input์ ์๋์ผ๋ก focus๊ฐ ๋ฉ๋๋ค.
useEffect(() => {
inputRef.current.focus();
}, []);
๋ก๊ทธ์ธ์ ๋๋ ์ ๋, ์ ๋ ฅํ username์ด ํ์ ์ผ๋ก ๋จ๊ฒ ํ ์๋ ์์ต๋๋ค.
๋จผ์ , ๋ฒํผ์ onClick={login} ์ฝ๋๋ฅผ ์์ฑํ๊ณ
login ํจ์๋ฅผ ์ ์ํฉ๋๋ค. alert์ ์ด์ฉํ๋ฉด์ input.Ref.current.value๋ก ๊ฐ์ ์ ๊ทผํ๋ฉด ๋ฉ๋๋ค.
const login = () => {
alert(`ํ์ํฉ๋๋ค, ${inputRef.current.value}!`);
};
return (
<div>
<input ref={inputRef} type="text" placeholder="username" />
<button onClick={login}>๋ก๊ทธ์ธ</button>
</div>
์ด๋ ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
โ ๏ธ ์ฃผ์: useRef์ ์ต์ด ๊ธฐ๋ณธ ๊ฐ์ useRef()๋ก ๋ฐ์ ์ธ์
DOM ์์์ ์ฃผ์ํ ์ ์, useRef์ ์ต์ด ๊ธฐ๋ณธ ๊ฐ์ return ๋ฌธ์ ์ ์ํด ๋ DOM์ด ์๋๊ณ useRef()๋ก ๋๊ฒจ๋ฐ์ ์ธ์๋ผ๋ ๊ฒ์ ๋๋ค. useRef๊ฐ ์ ์ธ๋ ๋น์์๋ ์์ง ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์ด๋ผ return์ผ๋ก ์ปดํฌ๋ํธ์ DOM์ด ๋ฐํ๋๊ธฐ ์ ์ด๋ฏ๋ก Undefined์ ๋๋ค. ์ฝ๋๋ฅผ ํตํด ์์๋ณด๊ฒ ์ต๋๋ค.
const RefComponent = () => {
const inputRef = useRef();
// ์ด๋ ๋ ๋๋ง์ด ๋๊ธฐ ์ (์ฆ, ๋ฐํ๋๊ธฐ ์ )์ด๋ผ undefinded๋ฅผ ๋ฐํ
console.log(inputRef.current); // undefined
useEffect(() => {
console.log(inputRef.current); // <input type="text"/>
}, [inputRef]);
return <input ref={inputRef} type="text" />;
};
'React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ Hooks (3) - useRef: ๋ณ์ ๊ด๋ฆฌ (0) | 2024.06.26 |
---|---|
[React] ๋ฆฌ์กํธ Hooks (2) - useEffect (0) | 2024.06.26 |
[React] ๋ฆฌ์กํธ Hooks (1) - useState (0) | 2024.06.02 |