
Custom Hook ๋ง๋ค๊ธฐ
- hooks ํด๋ ์์ฑ
- use์ด๋ฆ.js
- ์ธ ์ ์๋๋ก parameter ๋ฑ์ผ๋ก ๋ฐ์ ์ฃผ๊ธฐ
- ์์ ์ฌํญ์ ๋ง๋ค์ด๋จ๋ Custom Hook๋ง ์ฌ์ฉ
์์
useFetch.js
import { useState, useEffect } from "react";
export default function useFetch(url) {
const [data, setData] = useState([]);
useEffect(() => {
fetch(url)
.then((res) => {
return res.json();
})
.then((data) => {
setData(data);
});
}, [url]);
return data;
}
- ๋ฐ๋ ์ ์๋ ๊ฒ: api ์ฃผ์, ๋ฐ๋ผ์ para๋ก ๋ฐ๊ณ fetch์๋ ๋ฐ๊พธ์ด์ค
- ์์กด์ฑ ๋ฐฐ์ด๋ ๋ฐ๋ ์ ์์ผ๋ฏ๋ก url๋ก ์
๋ ฅ
- useState๋ ์ด๋๋ ์ฌ์ฉํ ์ ์๊ฒ
const[data, setData]=useState([])๋ก ์ค์
- ํ์๋ก ํ๋ ๊ฒ์ data ์ด๋ฏ๋ก
return data
DayList.js
import { Link } from "react-router-dom";
import useFetch from "../hooks/useFetch";
export default function DayList() {
const days = useFetch("http://localhost:3001/days");
return (
<ul className="list_day">
{days.map((day) => (
<li key={day.id}>
<Link to={`/day/${day.day}`}>Day {day.day}</Link>
</li>
))}
</ul>
);
}
Day.js
import dummy from "../db/data.json";
import Word from "./Word";
import { useParams } from "react-router-dom";
import { useEffect, useState } from "react";
import useFetch from "../hooks/useFetch";
export default function Day() {
const { day } = useParams();
const words = useFetch(`http://localhost:3001/words?day=&{day}`);
return (
<>
<h2>Day {day}</h2>
<table>
<tbody>
{words.map((word) => (
<Word word={word} key={word.id} />
))}
</tbody>
</table>
</>
);
}