일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- useImperativeHandle
- vscode
- 재귀함수
- useState
- 변수타입
- BIND
- hoisting
- mysql
- js
- virtualDOM
- 드림코딩
- CSS
- eventloop
- useReducer
- MariaDB
- 프로그래머스
- ConnectBy
- flexbox
- useContext
- SQL
- reactDOM
- 비제어컴포넌트
- ForwardRefs
- 제어컴포넌트
- useCallback
- useEffect
- reactPortals
- realDOM
- 리액트작동원리
- React
Archives
- Today
- Total
SOOM_BLOG [숨숨 블로그]
useImperativeHandle 본문
useImperativeHandle?
useImperativeHandle은 ref를 사용할 때 부모 컴포넌트에 노출되는 인스턴스 값을 사용자화(customizes) 한다.
useImperativeHandle는 forwardRef와 함께 사용한다.
useImperativeHandle(ref, createHandle, [deps])
- ref : 프로퍼티를 부여할 ref.
- createHandle : 객체를 리턴하는 함수. 해당 객체에 추가하고 싶은 프로퍼티를 정의하면 됨.
예제)
부모 컴포넌트
import React, { useState, useRef } from 'react';
import Input from '../UI/Input/Input';
const ParentCompo = (props) => {
const [inputIsValid, setInputValid] = useState(false)
const inputRef = useRef()
const inputChngHandler = (event) => {
if (event.target.value.includes('@')) {
setInputValid(true)
} else {
setInputValid(false)
}
};
const submitHandler = (event) => {
event.preventDefault();
if (!inputIsValid) {
inputRef.current.focus()
}
};
return (
<form onSubmit={submitHandler}>
<Input
isValid={inputIsValid}
id='email'
label='E-Mail'
type='email'
onChange={inputChngHandler}
ref={inputRef}
/>
<Button type="submit"> Login </Button>
</form>
);
};
export default ParentCompo;
자식 컴포넌트
import React, { useRef, useImperativeHandle } from 'react';
const Input = React.forwardRef((props, ref) => {
const inputRef = useRef()
const activate = () => {
inputRef.current.focus()
}
useImperativeHandle(ref, () => {
return {
focus: activate
}
})
return (
<div>
<label htmlFor={props.id}>{props.label}</label>
<input
ref={inputRef}
type={props.type}
id={props.id}
value={props.value}
onChange={props.onChange}
/>
</div>
);
});
export default Input;
<Input ref={inputRef} />를 렌더링한 부모 컴포넌트는 inputRef.current.focus()를 호출할 수 있다.
참고 자료 :
https://ko.reactjs.org/docs/hooks-reference.html#useimperativehandle
'TIL > react' 카테고리의 다른 글
리액트 작동 원리(1) (0) | 2022.02.17 |
---|---|
React Portals (0) | 2022.02.16 |
react) CONTEXT (0) | 2022.02.07 |
useState() VS useReducer() (0) | 2022.01.26 |
useEffect에서 CleanUp 함수 (0) | 2022.01.25 |