728x90
Custom Hooks?
컴포넌트를 만들다 보면 반복되는 로직이 자주 발생된다. 따라서 custom hooks를 만들어서 반복되는 로직을 쉽게 재활용 할 수 있다.
Custom Hooks는 "use"라는 단어로 시작한다. (ex: useFetch)
useFetch 만들기
기존에 사용했던 fetch는 아래처럼 모든 component에 사용해야했다.
const [sources, setSources] = useState([]);
useEffect(() => {
fetch('data/movieCarouselData.json', {
method: 'GET',
})
.then(res => res.json())
.then(data => {
setSources(data);
});
}, []);
하지만 custom hooks를 사용하면 모든 component에 재사용이 가능하다.
- src 디렉터리에 hooks라는 디렉터리를 만들고 useFetch.js 파일을 생성한다.
- 아래의 코드를 넣어준다.
useFetch.js
import { useState, useEffect } from 'react';
const useFetch = url => {
const [data, setData] = useState(null);
useEffect(() => {
fetch(url)
.then(res => res.json())
.then(data => setData(data))
}, [url]);
return [data];
};
export default useFetch;
- 실제 적용해야할 컴포넌트에서 위의 useFetch를 불러오면 된다.
...
import useFetch from '../../../hooks/useFetch';
...
const [sources] = useFetch('data/movieCarouselData.json');
...
return (
...
{sources &&
sources.map((source, index) => (
<div key={index}>
<MovieCarousel source={source} />
</div>
))}
...
);
};
...
여기서 sources는 useFetch에서 사용되었던 data 변수이며 useFetch 가로안에 있는 url을 입력해주면 된다.
return안에서 기존에는 sources.map 만 넣었으면 되나 custom hooks를 사용하면 sources && sources.map 으로 진행해야 한다.
custom hooks의 장점
- 구성 요소가 초기화될 때마다 useEffect가 호출되고 해당 가져오기 기능 내부에서 URL이 HTTP 요청을 할 것으로 예상합니다.
- 성공 및 오류 처리가 모두 한 곳에서 처리됩니다.
- 응답이 수신되면 데이터를 로컬 변수에 저장하고 반환합니다.
해당 useFetch는 단일 데이터를 받아올 때 사용이 가능하며 추후 axios를 적용해야 error도 잡아 낼 수 있는 방법이 있다고 한다.
참고 및 출처
https://towardsdev.com/react-custom-hook-fetch-cf764f717b88
https://react.vlpt.us/basic/21-custom-hook.html
https://www.w3schools.com/react/react_customhooks.asp
728x90
'React 실습' 카테고리의 다른 글
[React] jsx 문법 요령 - map을 이용하여 여러개의 태그 출력 (0) | 2023.06.08 |
---|---|
[Githib Action]CI / CD 자동 배포 정리 (질 & 답 형식) (0) | 2023.05.12 |
오늘의 술 프로젝트 - 작업 정리(1) [페이지네이션, 검색] 구현 (1) | 2022.11.04 |
yoga 프로젝트 작업일지 - 5 (0) | 2022.10.27 |
yoga 프로젝트 작업일지 - 4 (0) | 2022.10.26 |