
๐ ์๋ก
์๋
ํ์ธ์! ์ค๋์ React Hook Form ๊ณผ useRef ์ ์กฐํฉ์ ํตํด ํน์ input ์์์ ์ง์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
์ต๊ทผ ๊ฒ์ํ ํ๋ก์ ํธ์์ ๊ฒ์๊ธ์ ์ด ๋ ๋๊ธ ์์ฑ์ ํ๋์ ์๋์ผ๋ก ํฌ์ปค์ค๋ฅผ ์ฃผ๊ณ ์ถ์๋๋ฐ React Hook Form ๋์
์์ ์ด๋ฅผ ๊ตฌํํ๋๋ฐ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. ์ด์ ๋ํ ๋ด์ฉ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ณต์ ํฉ๋๋ค.
๐ค ๋ฌธ์ ์ํฉ ์ ref={commentAuthorInputRef} ๋ก๋ ๋์ํ์ง ์์๊น?
React Hook Form ์ ์ฌ์ฉํ ๋, ์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋๋ register ํจ์์ ๋๋ค. ์ด ํจ์๋ input ํ๋๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฌ๋ ํผ ์ ์ถ ๋ฑ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ๊ฐ ์ฒ์์ ์ฌ์ฉํ ๋ฐฉ์์ ์๋์ ๊ฐ์์ต๋๋ค.
const commentAuthorInputRef = useRef(null)
...
useEffect(() => {
commentAuthorInputRef.current.focus();
}, []);
...
<input ref={commentAuthorInputRef} ... />
๊ทธ๋ฐ๋ฐ, ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด React Hook Form ์ register ์ ref ์ ๋์์ ์ฐ๊ฒฐ๋์ง ์์, ์
๋ ฅ ๊ฐ์ด undefined ๋ก ๋ฐํ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
register ํจ์๋ input ํ๋๋ฅผ ๋ฑ๋กํ๋ฉด์ ํด๋น ํ๋์ ์ฐธ์กฐ ref ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์ธ๋ถ์์ ๋ณ๋์ ref ๋ฅผ ์ฐ๊ฒฐํ ๋๋ register ์์ ์ฐ๋์ด ์ค์ฒฉ๋ ์ ์์ต๋๋ค. ์ด ๋๋ฌธ์, ๋ด๋ถ์ ์ผ๋ก ํผ ๊ฐ์ ์ํ ๊ด๋ฆฌ๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ก ๋์ํ์ง ์๊ฒ ๋ฉ๋๋ค.
๐ ํด๊ฒฝ ๋ฐฉ๋ฒ: ref ๋ฅผ ํจ์๋ก ์ ์ํ๊ธฐ
React Hook Form ์ register ํจ์๋ ref ์ ํจ๊ป ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฅผ ์ ๋ ฅ ์์์ ์ฐ๊ฒฐํ๋ฉด์ ๋์์ ์ธ๋ถ ref ์๋ ์ฐ๊ฒฐํด์ผ ํ๊ธฐ ๋๋ฌธ์, ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
<input
{...commentRegister('author', {
required: '๋๊ธ ์์ฑ์๋ ํ์ ์
๋ ฅ์
๋๋ค.'
})}
ref={(e) => {
commentRegister('author').ref(e); // react-hook-form ์ ์ํ ref
commentAuthorInputRef.current = e; // ์ธ๋ถ ref
}}
...
/>
์ ์ฝ๋์์ ์ค์ํ ์ ์ ref ํจ์๊ฐ ๋ ๊ฐ์ง ์ฐ๊ฒฐ ์์
์ ๋์์ ์ํํ๋ค๋ ๊ฒ์
๋๋ค.
1. React Hook Form ์ ref ์ ์์(HTMLInputElement)๋ฅผ ์ฐ๊ฒฐ
2. ์ธ๋ถ ref์๋ ๋์ผํ ์์(HTMLInputElement)๋ฅผ ์ฐ๊ฒฐ
์ด๋ฅผ ํตํด React Hook Form ์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ์ฉํ๋ฉด์๋, ์ธ๋ถ์์๋ input ์์์ ์ ๊ทผํ ์ ์๊ฒ๋์์ต๋๋ค.๐คญ
๐ฌ ๊ฒฐ๋ก
React Hook Form ์ ๋งค์ฐ ํธ๋ฆฌํ ๋๊ตฌ์ด์ง๋ง, ๋๋๋ก ๋ค๋ฅธ React ๊ธฐ๋ฅ๊ณผ์ ์กฐํฉ์ด ํ์ํ ๋๊ฐ ์์ต๋๋ค. ์ค๋ ์๊ฐํ ๋ฐฉ์์ ๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ ๋์์ด ๋ ๊ฒ์
๋๋ค. ํนํ, ์ธ๋ถ ref์ ํจ๊ป React Hook Form ์ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ด ๋ฐฉ์์ด ํฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ผ ์ค๋๋ ์ฆ๊ฒ๊ฒ ์ฝ๋ฉํ์ธ์! ๐
'๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์ ๋ผ์ฐํ ์ฌ์ฉ ํ์ด์ง ๋ชจ๋ ๊ด๋ฆฌ (0) | 2023.08.20 |
---|---|
React Router ์์ Navigate ํจ์๋ฅผ ํ์ฅํ์ฌ ์ฌ์ฉํ๊ธฐ (0) | 2023.08.17 |
๋ฆฌ์กํธ ์ฌ์ฉ์ ์ดํด (0) | 2022.11.18 |
React ํ๋ก์ ํธ์ sass ์ฐ๊ฒฐ์ Node Sass version 6.0.1 is incompatible with ^4.0.0 || ^5.0.0. ์๋ฌ ํด๊ฒฐ (0) | 2021.07.18 |
React Router, a ํ๊ทธ (0) | 2021.07.17 |