Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Chakra
- JPA
- Gin
- Spring
- golang
- tanstackquery
- 티스토리챌린지
- RTK
- frontend
- react-hook-form
- go
- javascript
- hook
- css
- Redux
- React
- springboot
- satisfiles
- 오블완
- java
- designpatterns
- 웹애플리케이션서버
- storybook
- typescript
- backend
- ReactHooks
- test
- component
- JavaSpring
Archives
- Today
- Total
bkdragon's log
useImperativeHandle 본문
useImperativeHandle
은 ref로 노출되는 핸들을 사용자가 직접 정의할 수 있게 해주는 React 훅이다. 무슨 소리냐면 컴포넌트 내부 함수를 부모 컴포넌트에서 실행할 수 있게 해준다는 소리이다.
import React, { forwardRef, useRef, useImperativeHandle, Ref } from 'react';
interface MyInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
}
export interface MyInputHandle {
focus: () => void;
scrollIntoView: () => void;
}
const MyInput = forwardRef<MyInputHandle, MyInputProps>(function MyInput(
props,
ref: Ref<MyInputHandle>
) {
const inputRef = useRef<HTMLInputElement>(null);
useImperativeHandle(ref, () => ({
focus() {
inputRef.current?.focus();
},
scrollIntoView() {
inputRef.current?.scrollIntoView();
},
}));
return <input {...props} ref={inputRef} />;
});
export default MyInput;
이제 부모 컴포넌트에서 ref로 focus와 scrollIntoView 를 직접 실행시킬 수 있다.
import React, { useRef } from 'react';
import MyInput, { MyInputHandle } from './MyInput';
function Parent() {
const inputHandleRef = useRef<MyInputHandle>(null);
const handleFocus = () => {
inputHandleRef.current?.focus();
};
const handleScroll = () => {
inputHandleRef.current?.scrollIntoView();
};
return (
<div>
<MyInput ref={inputHandleRef} placeholder="Type something" />
<button onClick={handleFocus}>Focus Input</button>
<button onClick={handleScroll}>Scroll Into View</button>
</div>
);
}
export default Parent;
유연하고 커스텀이 쉽게 컴포넌트를 설계할 수 있다.
'React' 카테고리의 다른 글
Web Speech API (1) | 2024.11.26 |
---|---|
forwardRef (0) | 2024.11.20 |
Storybook Interactions Portal Component (0) | 2024.11.17 |
Storybook Interactions (0) | 2024.11.16 |
children 을 함수해서 동적으로 스타일을 지정하기 (0) | 2024.11.14 |