ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ useImperativeHandle์ ๋ฌด์์ผ๊น์?
**useImperativeHandle**์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ํน์ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๋๋ก ๋ง๋๋ ๋๊ตฌ์์.
์ผ๋ฐ์ ์ผ๋ก React์์๋ ๋ถ๋ชจ๊ฐ ์์์ ์ ์ดํ ๋ props๋ฅผ ์ฌ์ฉํ์์์?
๊ทธ๋ฐ๋ฐ ๋๋ก๋ ์์ ์ปดํฌ๋ํธ ๋ด๋ถ์ ํน์ ํจ์๋ ๊ฐ์ ๋ถ๋ชจ๊ฐ ์ง์ ํธ์ถํด์ผ ํ ๋๊ฐ ์์ด์.
์ด๋ useImperativeHandle์ ์ฌ์ฉํ๋ฉด
๋ถ๋ชจ๊ฐ ์์์ ํน์ ๊ธฐ๋ฅ๋ง ๋
ธ์ถํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋ผ์.
๐ ๋น์ : ๋ฆฌ๋ชจ์ปจ๊ณผ ํ ๋ ๋น์
ํ ๋ ๋น์ ์ ์์ํด๋ณผ๊น์? ๐บ
- ํ ๋ ๋น์ (์์ ์ปดํฌ๋ํธ) ์์๋ ๋ณผ๋ฅจ, ์ฑ๋ ๋ณ๊ฒฝ, ์ ์ ๋๊ธฐ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ด ์์ด์.
- ๊ทธ๋ฐ๋ฐ **๋ฆฌ๋ชจ์ปจ(๋ถ๋ชจ ์ปดํฌ๋ํธ)**์ ํตํด์๋ ๋ณผ๋ฅจ ์กฐ์ ์ด๋ ์ ์ ๋๊ธฐ ๊ฐ์ ํน์ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์์ด์ผ ํ์ฃ .
React์ **useImperativeHandle**์ ์ด๋ฐ ๋ฆฌ๋ชจ์ปจ ์ญํ ์ ํด์.
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ค ์ ์ดํ๋ ๊ฒ ์๋๋ผ,
๋
ธ์ถํ๊ณ ์ถ์ ๊ธฐ๋ฅ๋ง ์ ํํด์ ์ ์ดํ ์ ์๊ฒ ๋๋ ๊ฑฐ์์.
๐ ๏ธ ๊ธฐ๋ณธ ์์ : useImperativeHandle ์ฌ์ฉํ๊ธฐ
์, ์ด์ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด useImperativeHandle์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ๋๋ฆด๊ฒ์.
1. ์์ ์ปดํฌ๋ํธ์์ ํน์ ๊ธฐ๋ฅ์ ๋ ธ์ถํ๊ธฐ
import React, { useRef, useImperativeHandle, forwardRef } from "react";
// ์์ ์ปดํฌ๋ํธ
const ChildComponent = forwardRef((props, ref) => {
// ๋ด๋ถ์ ์๋ ํจ์๋ค
const sayHello = () => alert("์๋
ํ์ธ์! ๐");
const sayGoodbye = () => alert("์๋
ํ ๊ฐ์ธ์! ๐");
// ๋ถ๋ชจ๊ฐ ์ ๊ทผํ ๊ธฐ๋ฅ์ ๋
ธ์ถ (๋ฆฌ๋ชจ์ปจ์ ๋ฃ์ด์ค ๊ธฐ๋ฅ)
useImperativeHandle(ref, () => ({
sayHello,
}));
return <div>์ฌ๊ธฐ๋ ์์ ์ปดํฌ๋ํธ์
๋๋ค.</div>;
});
export default ChildComponent;
2. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์์ ๊ธฐ๋ฅ์ ํธ์ถํ๊ธฐ
import React, { useRef } from "react";
import ChildComponent from "./ChildComponent";
function ParentComponent() {
const childRef = useRef(null); // ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฐธ์กฐํ ref ์์ฑ
const handleClick = () => {
childRef.current.sayHello(); // ์์ ์ปดํฌ๋ํธ์ sayHello ํจ์ ํธ์ถ
};
return (
<div>
<h1>๋ถ๋ชจ ์ปดํฌ๋ํธ</h1>
<ChildComponent ref={childRef} />
<button onClick={handleClick}>์์ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ ์คํํ๊ธฐ</button>
</div>
);
}
export default ParentComponent;
๐ ์ฝ๋์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
- forwardRef
- ChildComponent๋ฅผ ๊ฐ์ธ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ref๋ฅผ ์ ๋ฌํ ์ ์๋๋ก ํด์.
- useImperativeHandle
- ์์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ถ๋ชจ์๊ฒ ๋ ธ์ถํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ์ ๋ฌํด์.
- ์ ์์ ์์๋ sayHello๋ง ๋ถ๋ชจ๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ๋ ธ์ถํ์ด์.
- sayGoodbye๋ ๋ ธ์ถ๋์ง ์์ผ๋๊น ๋ถ๋ชจ๊ฐ ์ง์ ์ฌ์ฉํ ์ ์์ด์.
- ref๋ฅผ ํตํด ๊ธฐ๋ฅ ํธ์ถ
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ childRef.current.sayHello()๋ฅผ ํธ์ถํ๋ฉด
์์ ์ปดํฌ๋ํธ์ sayHello ํจ์๊ฐ ์คํ๋ผ์.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ childRef.current.sayHello()๋ฅผ ํธ์ถํ๋ฉด
๐ฎ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ ๊น์?
**useImperativeHandle**์ ์ด๋ฐ ๊ฒฝ์ฐ์ ์ ์ฉํด์:
- ์์ ์ปดํฌ๋ํธ์ ํน์ ๊ธฐ๋ฅ๋ง ๋ถ๋ชจ์๊ฒ ์ ๊ณตํ๊ณ ์ถ์ ๋
- ์๋ฅผ ๋ค์ด, ๋ชจ๋ฌ์ฐฝ ์ด๊ณ ๋ซ๊ธฐ, ํฌ์ปค์ค ์ด๋ํ๊ธฐ ๊ฐ์ ๊ธฐ๋ฅ๋ค.
- DOM ์์์ ์ ๊ทผํด์ผ ํ ๋
- input์ด๋ button ์์์ ์ง์ ์ ๊ทผํด์ ํฌ์ปค์ค๋ฅผ ์ฃผ๋ ๊ฒฝ์ฐ.
๐งฉ ์์ : ๋ฒํผ ํด๋ฆญ์ผ๋ก input์ ํฌ์ปค์ค ์ฃผ๊ธฐ
import React, { useRef, useImperativeHandle, forwardRef } from "react";
const InputField = forwardRef((props, ref) => {
const inputRef = useRef();
useImperativeHandle(ref, () => ({
focusInput: () => inputRef.current.focus(),
}));
return <input ref={inputRef} placeholder="์ฌ๊ธฐ์ ์
๋ ฅํ์ธ์" />;
});
function App() {
const inputFieldRef = useRef();
const handleFocus = () => {
inputFieldRef.current.focusInput();
};
return (
<div>
<InputField ref={inputFieldRef} />
<button onClick={handleFocus}>์
๋ ฅ์ฐฝ์ ํฌ์ปค์ค ์ฃผ๊ธฐ</button>
</div>
);
}
export default App;
์ค๋ช :
- useImperativeHandle์ ํตํด focusInput์ด๋ผ๋ ๊ธฐ๋ฅ๋ง ๋ถ๋ชจ์๊ฒ ๋ ธ์ถํ์ด์.
- ๋ฒํผ์ ํด๋ฆญํ๋ฉด input์ ํฌ์ปค์ค๊ฐ ๊ฐ๋๋ก ์ ์ดํ ์ ์์ฃ .
๐ ์ ๋ฆฌํ์๋ฉด!
useImperativeHandle์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ํน์ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์์.
์์ ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ชจ๋ ๋ด์ฉ์ ๋
ธ์ถํ์ง ์๊ณ , ๋ฑ ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฌํ๋ ๊ฒ ํต์ฌ์ด์์!
'web > react hook' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
useLayoutEffect (0) | 2024.12.14 |
---|---|
useInsertionEffect (0) | 2024.12.14 |
useId (0) | 2024.12.14 |
useEffect (1) | 2024.12.14 |
useDeferredValue (0) | 2024.12.14 |
- Total
- Today
- Yesterday
- ์ ์ฅ์
- ์ธ๋ถํฐํธ
- ์ํ๊ด๋ฆฌ
- react dom hook
- private regisirty
- state
- prefetchdns
- useid
- useRef
- experimental_taintuniquevalue
- useinsertioneffect
- Nextjs
- dns-prefetch
- image pull
- flushsync
- react hook
- zustand
- Props
- component
- useformstatus
- preconnect
- react dom
- ๋ฒ ํ
- experimental_taintobjectreference
- ์คํ์
- finddomnode
- Store
- experimental
- react
- usedeferredvalue
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |