ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ forwardRef๋ ๋ฌด์์ผ๊น์?
**forwardRef**๋ React์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ DOM ์์์ ์ง์ ์ ๊ทผํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
์กฐ๊ธ ๋ ์ฝ๊ฒ ๋งํ๋ฉด **"๋ถ๋ชจ๊ฐ ์์์ ํน์ ํ๊ทธ๋ ์์๋ฅผ ๋ฐ๋ก ๊ฐ๋ฆฌํค๊ฒ ํด์ค๋ค"**๋ผ๊ณ ์๊ฐํ๋ฉด ๋ผ์.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ์ฌ๋ถ๋ฆ๊พผ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ์น๊ตฌํํ ๋งํธ์์ ๋ฌผ๊ฑด ์ข ์ฌ๋ค ๋ฌ๋ผ๊ณ ๋ถํํ๋ค๊ณ ์๊ฐํด ๋ด์.
- ์ฌ๋ฌ๋ถ(๋ถ๋ชจ)์ ์น๊ตฌ(์์)ํํ ์ฌ๋ถ๋ฆ์ ์์ผ์.
- ๊ทธ๋ฐ๋ฐ ๋ฌผ๊ฑด(์ ๋ ฅ ์ฐฝ, ๋ฒํผ ๋ฑ DOM ์์)์ ์ฌ ์ค๊ฒ ํ ๋, ์ง์ ๊ทธ ๋ฌผ๊ฑด์ ๊ฐ๋ฆฌํฌ ์ ์์ด์ผ ํ๊ฒ ์ฃ ?
- ์ด๋ ์น๊ตฌ๊ฐ ๊ทธ ๋ฌผ๊ฑด์ "์ฌ๊ธฐ ์์ด!"๋ผ๊ณ ์ง์ ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ **forwardRef**์ ๋๋ค.
๐ ๏ธ forwardRef ์ฌ์ฉ๋ฒ
์ฝ๋ ์์ ๋ฅผ ํตํด **forwardRef**๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ดํด๋ณผ๊ฒ์.
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ input ์์์ ๋ฐ๋ก ์ ๊ทผํ๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ฆด๊ฒ์.
1. forwardRef๋ฅผ ์ฌ์ฉํ ์์ ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
๋จผ์ , **forwardRef**๋ฅผ ์ฌ์ฉํด ์์ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํฉ๋๋ค.
import React, { forwardRef } from 'react';
// ์์ ์ปดํฌ๋ํธ
const CustomInput = forwardRef((props, ref) => {
return <input ref={ref} {...props} placeholder="์ฌ๊ธฐ์ ์
๋ ฅํด๋ณด์ธ์!" />;
});
export default CustomInput;
์ค๋ช :
- forwardRef: ์์ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ชจ๋ก๋ถํฐ **ref**๋ฅผ ๋ฐ์ ์ ์๊ฒ ํด์ค๋๋ค.
- ref: ๋ถ๋ชจ๊ฐ ํน์ ์์(์ฌ๊ธฐ์๋ input)๋ฅผ ์ง์ ๊ฐ๋ฆฌํฌ ์ ์๊ฒ ํ๋ ์ฐธ์กฐ(Reference)์ ๋๋ค.
- {...props}: ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ ๋ฌ๋ฐ์ ์์ฑ๋ค์ ๊ทธ๋๋ก ์ ๋ฌํด์.
2. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ref ์ฌ์ฉํ๊ธฐ
๋ถ๋ชจ ์ปดํฌ๋ํธ์์ useRef๋ฅผ ์ฌ์ฉํด ์์์ input ์์์ ์ ๊ทผํด ๋ณด๊ฒ ์ต๋๋ค.
import React, { useRef } from 'react';
import CustomInput from './CustomInput';
function ParentComponent() {
const inputRef = useRef(null); // ์ฐธ์กฐ๋ฅผ ์ ์ฅํ ref ์์ฑ
const focusInput = () => {
// ์์์ input ์์์ ์ง์ ์ ๊ทผํด์ ํฌ์ปค์ค ์ค์
inputRef.current.focus();
};
return (
<div>
<h2>forwardRef ์์ </h2>
<CustomInput ref={inputRef} /> {/* ref ์ ๋ฌ */}
<button onClick={focusInput}>์
๋ ฅ์ฐฝ์ ํฌ์ปค์คํ๊ธฐ</button>
</div>
);
}
export default ParentComponent;
๐ ์ฝ๋ ์ค๋ช
- ์์ ์ปดํฌ๋ํธ(CustomInput)
- forwardRef๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ชจ๊ฐ ref๋ฅผ ์์์ input์ ์ฐ๊ฒฐํ ์ ์๋๋ก ๋ง๋ค์์ต๋๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ(ParentComponent)
- useRef๋ฅผ ์ฌ์ฉํด์ ์ฐธ์กฐ๋ฅผ ์์ฑํ๊ณ , ์์ ์ปดํฌ๋ํธ์ ref๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ๋ฒํผ ํด๋ฆญ ์ **ref.current.focus()**๋ฅผ ํตํด ์์์ input์ ํฌ์ปค์ค๋ฅผ ์ค์ ํฉ๋๋ค.
- ๊ฒฐ๊ณผ
- ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ ๋ ฅ์ฐฝ์ ์๋์ผ๋ก ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ง๋๋ค.
๐ ์คํ ๊ฒฐ๊ณผ
- ํ๋ฉด์ ์ ๋ ฅ์ฐฝ๊ณผ "์ ๋ ฅ์ฐฝ์ ํฌ์ปค์คํ๊ธฐ" ๋ฒํผ์ด ํ์๋ฉ๋๋ค.
- ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ ๋ ฅ์ฐฝ์ ์๋์ผ๋ก ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ์.
๐ forwardRef๋ฅผ ์ฌ์ฉํ๋ ์ด์
- DOM ์์์ ์ง์ ์ ๊ทผํด์ผ ํ ๋
- ์ ๋ ฅ์ฐฝ์ ํฌ์ปค์ค๋ฅผ ์ฃผ๊ฑฐ๋, ํน์ DOM ์์์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ๋ ์ ์ฉํฉ๋๋ค.
- ์์ ์ปดํฌ๋ํธ์ ์์๋ฅผ ๋ถ๋ชจ๊ฐ ์ ์ดํ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ ๋ด๋ถ์ ์์๋ฅผ ์ ์ดํด์ผ ํ๋ ์ํฉ์์ ์ฌ์ฉํด์.
- ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ
- forwardRef๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ปดํฌ๋ํธ์์๋ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ด์.
๐จ ์ฃผ์ํ ์
- ref๋ DOM ์์์๋ง ์ฌ์ฉํ ์ ์์ด์.
forwardRef๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ถ๋ชจ๋ ์์ ์ปดํฌ๋ํธ์ DOM ์์์ ์ ๊ทผํ ์ ์์ต๋๋ค. - ์ง์ DOM ์กฐ์์ ์ต์ํํ์ธ์.
React์ ๊ธฐ๋ณธ ์์น์ **"์ ์ธํ UI"**์ด๊ธฐ ๋๋ฌธ์ ๋๋ฌด ์์ฃผ DOM์ ์กฐ์ํ๋ฉด ๋ณต์กํด์ง ์ ์์ด์.
๐ ๋ง๋ฌด๋ฆฌ
React์ **forwardRef**๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ DOM ์์์ ์ ๊ทผํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
- ์์์ด ๋ถ๋ชจ์๊ฒ ref๋ฅผ ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํด์.
- ๋ฒํผ ํด๋ฆญ ์ ์ ๋ ฅ์ฐฝ์ ํฌ์ปค์ค๋ฅผ ์ฃผ๋ ๊ฒ์ฒ๋ผ ๊ฐ๋จํ ์กฐ์์ด ํ์ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ต๋๋ค.
- Total
- Today
- Yesterday
- useid
- ์ธ๋ถํฐํธ
- dns-prefetch
- Store
- preconnect
- ์คํ์
- useRef
- Props
- react dom hook
- usedeferredvalue
- ์ ์ฅ์
- image pull
- experimental
- state
- ์ํ๊ด๋ฆฌ
- private regisirty
- experimental_taintobjectreference
- ๋ฒ ํ
- flushsync
- react hook
- react
- experimental_taintuniquevalue
- finddomnode
- react dom
- Nextjs
- component
- useformstatus
- prefetchdns
- useinsertioneffect
- zustand
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |