๐Ÿ“–[React] Custom Hooks

ํ˜ฑยท2022๋…„ 10์›” 15์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
24/28

Custom Hook ๋งŒ๋“ค๊ธฐ

  1. hooks ํด๋” ์ƒ์„ฑ
  2. use์ด๋ฆ„.js
  3. ์“ธ ์ˆ˜ ์žˆ๋„๋ก parameter ๋“ฑ์œผ๋กœ ๋ฐ›์•„ ์ฃผ๊ธฐ
  4. ์ˆ˜์ •์‚ฌํ•ญ์€ ๋งŒ๋“ค์–ด๋†จ๋˜ 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;
}
  1. ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ฒƒ: api ์ฃผ์†Œ, ๋”ฐ๋ผ์„œ para๋กœ ๋ฐ›๊ณ  fetch์—๋„ ๋ฐ”๊พธ์–ด์คŒ
  2. ์˜์กด์„ฑ ๋ฐฐ์—ด๋„ ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ url๋กœ ์ž…๋ ฅ
  3. useState๋„ ์–ด๋””๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ const[data, setData]=useState([])๋กœ ์„ค์ •
  4. ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์€ 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"); 
  //useFetch return๊ฐ’์„ 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>
    </>
  );
}
profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€