사용자 정의 후크 반응
후크는 재사용 가능한 함수입니다.
여러 구성 요소에서 사용해야 하는 구성 요소 논리가 있는 경우 해당 논리를 사용자 지정 Hook으로 추출할 수 있습니다.
Custom Hooks는 "use"로 시작합니다. 예: useFetch
.
후크 만들기
다음 코드에서는 Home
구성 요소에서 데이터를 가져와서 표시합니다.
JSONPlaceholder 서비스를 사용하여 가짜 데이터를 가져옵니다. 이 서비스는 기존 데이터가 없을 때 애플리케이션을 테스트하는 데 유용합니다.
자세히 알아보려면 JavaScript Fetch API 섹션을 확인하세요.
JSONPlaceholder 서비스를 사용하여 가짜 "todo" 항목을 가져오고 페이지에 제목을 표시합니다.
예시:
index.js
:
import { useState, useEffect } from "react";
import ReactDOM from "react-dom";
const Home = () => {
const [data, setData] = useState(null);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/todos")
.then((res) => res.json())
.then((data) => setData(data));
}, []);
return (
<>
{data &&
data.map((item) => {
return <p key={item.id}>{item.title}</p>;
})}
</>
);
};
ReactDOM.render(<Home />, document.getElementById("root"));
가져오기 논리는 다른 구성 요소에서도 필요할 수 있으므로 사용자 정의 Hook으로 추출합니다.
가져오기 로직을 커스텀 훅으로 사용할 새 파일로 이동합니다.
예시:
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;
index.js
:
import ReactDOM from "react-dom";
import useFetch from "./useFetch";
const Home = () => {
const [data] = useFetch("https://jsonplaceholder.typicode.com/todos");
return (
<>
{data &&
data.map((item) => {
return <p key={item.id}>{item.title}</p>;
})}
</>
);
};
ReactDOM.render(<Home />, document.getElementById("root"));
예시 설명
데이터를 가져오는 데 필요한 모든 논리를 포함 useFetch.js
하는 라는 함수를 포함하는 이라는 새 파일을 만들었습니다 .useFetch
하드 코딩된 URL을 제거하고 url
사용자 정의 Hook에 전달할 수 있는 변수로 대체했습니다.
마지막으로 Hook에서 데이터를 반환합니다.
에서는 Hook index.js
을 가져와서 useFetch
다른 Hook처럼 활용하고 있습니다. 여기에서 데이터를 가져올 URL을 전달합니다.
이제 모든 구성 요소에서 이 사용자 정의 후크를 재사용하여 모든 URL에서 데이터를 가져올 수 있습니다.