티스토리 뷰
커스텀 훅이란?
커스텀 훅은 React에서 제공하는 기본 훅들을 기반으로 사용자 정의된 훅을 만들어내는 것을 의미합니다. 이를 통해 코드의 재사용성을 증가시키고, 관련된 로직을 효율적으로 관리할 수 있습니다.
커스텀 훅 사용하는 이유
- 로직의 중복 제거: 비슷한 로직을 여러 컴포넌트에서 사용해야 할 때, 커스텀 훅을 통해 중복된 코드를 효과적으로 제거할 수 있습니다.
- 가독성 향상: 특정 기능이나 상태를 훅으로 추상화하면, 컴포넌트 코드가 간결해지고 가독성이 향상됩니다.
- 재사용성 증가: 커스텀 훅을 사용하면 동일한 로직을 필요로 하는 여러 컴포넌트에서 쉽게 재사용할 수 있습니다.
사용 예시 (useInput 커스텀 훅)
커스텀 훅을 사용하지 않았을 때
import React, { useState } from 'react';
const LoginPage = () => {
const [ID, setID] = useState('');
const [Password, setPassword] = useState('');
const onIDHandler = event => {
setID(event.currentTarget.value);
};
const onPasswordHandler = event => {
setPassword(event.currentTarget.value);
};
return (
<div>
<input type="text" id="id" value={ID} onChange={onIDHandler} />
<input type="password" id="password" value={Password} onChange={onPasswordHandler} />
</div>
);
};
export default LoginPage;
onIDHandler 및 onPasswordHandler 함수를 사용하여 input 값의 상태를 변경하고 있습니다. 둘 다 똑같은 로직을 사용하는 중복되는 코드입니다.
중복을 줄이기 위해 두 함수를 useInput이라는 커스텀 훅으로 만들어보겠습니다.
useInput 코드 작성
import { useState } from 'react';
const useInput = initialValue => {
const [value, setValue] = useState(initialValue);
const handleChange = e => {
setValue(e.target.value);
};
return [value, handleChange];
};
export default useInput;
useState 값을 handleChange라는 함수로 통해 변경하는 커스텀 훅입니다. return 값으로 value와 handleChange를 넘겨줍니다.
useInput 사용
import React from 'react';
import useInput from '../hooks/useInput';
const LoginPage = () => {
const [idInput, handleChangeID] = useInput('');
const [passwordInput, handleChangePassword] = useInput('');
return (
<div>
<input type="text" id="id" value={idInput} onChange={handleChangeID} />
<input type="password" id="password" value={passwordInput} onChange={handleChangePassword} />
</div>
);
};
export default LoginPage;
위와 같이 useInput을 사용하여 코드를 작성하면 중복 코드를 줄일 수 있고 재사용성이 증가합니다.
+ 번외) useToggle 커스텀 훅 구현
useToggle 코드 작성
import { useState } from 'react';
const useToggle = (initialValue = false) => {
const [value, setValue] = useState(initialValue);
const toggle = () => {
setValue(prevValue => !prevValue);
};
return [value, toggle];
};
export default useToggle;
프론트엔드 개발에 주로 사용되는 toggle 이벤트도 위처럼 커스텀 훅으로 작성하여 사용하면 재사용성을 증가시킬 수 있습니다.
useToggle 사용
import useToggle from '../hooks/useToggle';
const TestPage = () => {
const [isToggled, toggle] = useToggle(false);
return (
<div className="container">
<button type="button" onClick={toggle}>
{isToggled ? 'off' : 'on'}
</button>
</div>
);
};
export default TestPage;
감사합니다.
'React.js' 카테고리의 다른 글
[React.js] 메모리제이션을 통해 성능 최적화 하기 (0) | 2024.05.20 |
---|---|
[React.js] axios.interceptors를 이용하여 액세스 토큰 재발급 및 헤더 설정하기 (0) | 2024.05.15 |
[React.js] rc-dock을 사용한 유연한 탭 레이아웃 구현하기 (0) | 2024.03.22 |
[React.js] 드래그 앤 드롭으로 삭제 구현 (0) | 2024.01.13 |
[React.js] 메타마스크 sepolia 테스트넷 트랜잭션 보내기 (1) | 2023.11.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 9575
- 25329
- revalidateTag
- rc-dock
- react-query
- revalidatePath
- react-quey
- sepolia
- React.JS
- useoptimistic
- useMemo
- zustand
- useCallback
- RefreshToken
- react-three-fiber
- baekjoon
- 해시를 사용한 집합과 맵
- 24431
- js
- eventemitter3
- Next.js
- useMutation
- react19
- 20551
- React
- useQuery
- 백준
- stompjs
- 4659
- NextAuth
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함