React custom hook
custom hook을 알아보자.
React 커스텀 훅 만드는 법
리액트 커스텀 훅을 만드는 방법은 재사용 가능한 로직을 함수로 추출하여 필요할 때
여러 컴포넌트에서 사용할 수 있도록 하는 것이다.
커스텀 훅 만드는 방법
- 훅을 정의하는 함수 이름은
use
로 시작한다. - 리액트 훅을 사용하여 원하는 로직을 구현한다
- 필요한 데이터를 반환하거나, 상태와 함수를 반환한다.
예제코드
윈도우 사이즈를 추적하는 커스텀 훅으로 예시를 살펴보자.
커스텀 훅 정의
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
import { useState, useEffect } from 'react';
function useWindowSize() {
// state를 사용하여 window의 width와 height를 저장.
const [windowSize, setWindowSize] = useState({
width: window.innerWidth,
height: window.innerHeight,
});
useEffect(() => {
// window resize 이벤트 핸들러
function handleResize() {
setWindowSize({
width: window.innerWidth,
height: window.innerHeight,
});
}
// 이벤트 리스너를 추가.
window.addEventListener('resize', handleResize);
// 클린업 함수로 이벤트 리스너를 제거.
return () => window.removeEventListener('resize', handleResize);
}, []); // 빈 배열로 두어 컴포넌트가 마운트될 때 한 번만 실행되도록 함.
return windowSize; // window의 크기를 반환.
}
컴포넌트에서 커스텀 훅 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import React from 'react';
import useWindowSize from './useWindowSize'; // 커스텀 훅을 import
function MyComponent() {
const { width, height } = useWindowSize(); // 커스텀 훅을 사용하여 window의 크기를 가져온다.
return (
<div>
<h1>Window Size</h1>
<p>Width: {width}px</p>
<p>Height: {height}px</p>
</div>
);
}
export default MyComponent;
폼 입력 관리하는 커스텀 훅
커스텀 훅 정의
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { useState } from 'react';
function useForm(initialValues) {
const [values, setValues] = useState(initialValues);
const handleChange = (event) => {
const { name, value } = event.target;
setValues({
...values,
[name]: value,
});
};
const resetForm = () => {
setValues(initialValues);
};
return {
values,
handleChange,
resetForm,
};
}
컴포넌트에서 커스텀 훅 사용
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
32
33
34
35
36
37
38
39
40
41
42
43
import React from 'react';
import useForm from './useForm'; // 커스텀 훅을 import.
function MyForm() {
const { values, handleChange, resetForm } = useForm({ username: '', email: '' });
const handleSubmit = (event) => {
event.preventDefault();
console.log('Form submitted:', values);
resetForm(); // 폼을 초기화.
};
return (
<form onSubmit={handleSubmit}>
<div>
<label>
Username:
<input
type="text"
name="username"
value={values.username}
onChange={handleChange}
/>
</label>
</div>
<div>
<label>
Email:
<input
type="email"
name="email"
value={values.email}
onChange={handleChange}
/>
</label>
</div>
<button type="submit">Submit</button>
</form>
);
}
export default MyForm;
결론
커스텀 훅 이름은 use
로 시작해야 한다.
리액트 훅을 사용하여 재사용 가능한 로직을 커스텀 훅으로 추출한다.
커스텀 훅은 필요한 데이터를 반환하거나, 상태와 함수를 반환할 수 있다.
다양한 컴포넌트에서 커스텀 훅을 호출하여 동일한 로직을 재사용 할 수 있다.
This post is licensed under CC BY 4.0 by the author.