728x90
๋ฐ์ํ
๐กReact๋ ์ปดํฌ๋ํธ์ DOM ์ฐธ์กฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ref๋ฅผ ์ ๊ณตํฉ๋๋ค. React 18๊ณผ 19 ๋ฒ์ ์์ forwardRef์ ref์ ์ฌ์ฉ ๋ฐฉ์์๋ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์๋์์ ๊ฐ ๋ฒ์ ์ ์ฃผ์ ํน์ง์ ์ค๋ช ํ๊ณ , ์ฝ๋ ์์ ๋ฅผ ํตํด ์ฐจ์ด์ ์ ๋ช ํํ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
React 18์ forwardRef
ํน์ง
- forwardRef๋ ํจ์ํ ์ปดํฌ๋ํธ์์ ๋ถ๋ชจ๊ฐ ์ ๋ฌํ ref๋ฅผ ์์ ์ปดํฌ๋ํธ์ DOM ์์์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฃผ๋ก HOC(High-Order Component) ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ์ ์ฉํฉ๋๋ค.
- React 18์์๋ ref๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด React.forwardRef๋ก ๊ฐ์ธ์ผ ํ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋ฐ๋์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ref๋ฅผ ์๋์ผ๋ก ๋ฐ์์ผ ํฉ๋๋ค.
์์
import React, { forwardRef, useRef } from 'react';
const InputComponent = forwardRef((props, ref) => {
return <input {...props} ref={ref} />;
});
function App() {
const inputRef = useRef(null);
const focusInput = () => {
if (inputRef.current) {
inputRef.current.focus();
}
};
return (
<div>
<InputComponent ref={inputRef} placeholder="Type here..." />
<button onClick={focusInput}>Focus Input</button>
</div>
);
}
export default App;
์ค๋ช
- InputComponent๋ forwardRef๋ฅผ ์ฌ์ฉํด ref๋ฅผ input DOM ์์์ ์ ๋ฌํฉ๋๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ App์์ useRef๋ก inputRef๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ InputComponent์ ์ ๋ฌํ์ฌ DOM ์ฐธ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
React 19์ ref
ํน์ง
- React 19์์๋ ํจ์ํ ์ปดํฌ๋ํธ์ ์ง์ ref๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ๋์ ๋์์ต๋๋ค.
- ์ด์ forwardRef ์์ด๋ ref๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
- React๊ฐ ์๋์ผ๋ก ref๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ง๋๋ค.
์์
import React, { useRef } from 'react';
const InputComponent = React.memo((props) => {
return <input {...props} />;
});
function App() {
const inputRef = useRef(null);
const focusInput = () => {
if (inputRef.current) {
inputRef.current.focus();
}
};
return (
<div>
<InputComponent ref={inputRef} placeholder="Type here..." />
<button onClick={focusInput}>Focus Input</button>
</div>
);
}
export default App;
์ค๋ช
- InputComponent๋ ๋ณ๋์ forwardRef ์์ด๋ ref๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
- React 19์์๋ ๋ด๋ถ์ ์ผ๋ก ref๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ถ๊ฐ ์ค์ ์์ด๋ DOM ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ฃผ์ ์ฐจ์ด์
ํน์ง React 18 React 19
forwardRef ํ์ ์ฌ๋ถ | ํ์ | ๋ถํ์ |
์ฝ๋ ๊ฐ๊ฒฐ์ฑ | ๋น๊ต์ ๋ณต์กํจ | ๋ ๊ฐ๊ฒฐํจ |
DOM ์ฐธ์กฐ ์ฒ๋ฆฌ ๋ฐฉ์ | ๋ช ์์ ์ผ๋ก forwardRef๋ฅผ ํตํด ์ ๋ฌ | React๊ฐ ๋ด๋ถ์ ์ผ๋ก ์๋ ์ฒ๋ฆฌ |
๊ธฐ์กด ์ฝ๋์์ ํธํ์ฑ | ๋ณ๋์ ์ ๋ฐ์ดํธ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ | React 19๋ก ์ ๊ทธ๋ ์ด๋ํด์ผ ํ์ฉ ๊ฐ๋ฅ |
๊ฒฐ๋ก
React 19์ ์๋ก์ด ref ๊ธฐ๋ฅ์ ์ฝ๋ ๊ฐ๊ฒฐ์ฑ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ ํฌ๊ฒ ๊ฐ์ ํฉ๋๋ค. ์ด์ ๋ฒ์ ์์ forwardRef๋ฅผ ์ฌ์ฉํด ์์ฑํ๋ ์ฝ๋๊ฐ ๋ง๋ค๋ฉด, React 19๋ก ์ ๊ทธ๋ ์ด๋ ํ ๋ ๊ฐ๋จํ ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋งํ ์ ์์ต๋๋ค. ๋ค๋ง, forwardRef๋ฅผ ์ด์ฉํ ๊ณ ๊ธ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์ฌ์ ํ ์ ํจํ๋ฏ๋ก, ํ์์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ์ธ์.
728x90
๋ฐ์ํ