๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ผ ์ฌ์ด ๋ฐฉ๋ฒ.
ํ๋ฒํ๊ฒ Extract Function
์ ์ํํ๋ฉด ๋๋ค.
์ปดํฌ๋ํธ๊ฐ ๋๋ฌธ์๋ก ์์ํ๋ PascalCase๋ก ์ด๋ฆ์ ๋ถ์ธ๋ค๋ฉด,
Hook์ use
๋ก ์์ํ๋ camelCase๋ก ์ด๋ฆ์ ๋ถ์ด๋ฉด ๋๋ค.
์ด๋ฐ ์ฝ๋๊ฐ ์๋ค๊ณ ํด๋ณด์
import { useEffect, useState } from "react";
import TimerControl from "./components/TimerControl";
export default function App() {
const [products, setProducts] = useState([]);
useEffect(() => {
const fetchProducts = async () => {
const url = 'http://localhost:3000/products';
const response = await fetch(url);
const data = await response.json();
setProducts(data.products);
};
fetchProducts();
}, []);
return (
<>
<TimerControl />
<p>Hello, world!</p>
</>
);
}
์๋ฅผ state, useEffect๋ฅผ ์ฎ๊ฒจ์ ๋ง๋ ๋ค.
function useFetchProducts() {
const [products, setProducts] = useState([]);
useEffect(() => {
const fetchProducts = async () => {
const url = 'http://localhost:3000/products';
const response = await fetch(url);
const data = await response.json();
setProducts(data.products);
};
fetchProducts();
}, []);
return products
}
export default function App() {
const products = useFetchProducts()
return (
<>
<TimerControl />
<p>Hello, world!</p>
</>
);
}
~src/hooks/useFetchProducts ์ ๋ด์์ค ;;
// useFetchProducts.ts
import { useEffect, useState } from "react";
export default function useFetchProducts() {
const [products, setProducts] = useState([]);
useEffect(() => {
const fetchProducts = async () => {
const url = 'http://localhost:3000/products';
const response = await fetch(url);
const data = await response.json();
setProducts(data.products);
};
fetchProducts();
}, []);
return products
}
// App.tsx
import { useEffect, useState } from "react";
import TimerControl from "./components/TimerControl";
import useFetchProducts from "./hooks/useFetchProducts";
export default function App() {
const products = useFetchProducts()
return (
<>
<TimerControl />
<p>Hello, world!</p>
</>
);
}
setState ํจ์๋ ์จ๊ธฐ๋ ํํ. ์บก์ํํ ํํ์ด๋ค.
์ปดํฌ๋ํธ ์ฝ๋๋ ๋ช
ํํด์ง๊ณ setState ํจ์๊ฐ ์ค์๋ก ์๋ชป ์ฐ์ผ ๋ฌธ์ ๋ฅผ ํด์.
์ฌ๋ฌ state๋ฅผ ํ๋ฒ์ ๋ฌถ๋๊ฒ๋ ๊ฐ๋ฅ.
Hook ๊ท์น
Hook ํธ์ถ์ ๊ท์น์ด ์์ด์ ๋จ์ํ๊ฒ ์ฐ๋๋ก ๋
ธ๋ ฅํด์ผ ํ๋ค.
Function Component ๋ฐ๋ก ์์ชฝ(ํจ์์ ์ต์์)์์๋ง ํธ์ถ. ์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ ์์์ ํ๋ฉด ์๋จ. ์์ ๋ณด์ฅ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํจ์๋ ์ค์ ๋ก ์ํ๋ฅผ ๊ฐ์ง ์ ์์ง๋ง react hook์ index ๊ธฐ๋ฐ์ ์ธ๋ถ ์ํ์ ๊ฐ์ ์ ์ฅํด๋๊ณ ๋ง์น ๊ทธ ํจ์๊ฐ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ฒ ์ฒ๋ผ ํจ๊ณผ๋ฅผ ๋ด๋ ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Function Component ๋๋ Custom Hook์์๋ง ํธ์ถ. ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์ํ๋ฅผ ๊ฐ์ง ์ ์๋๋ก ๋ง๋ ์ปจ์
์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐ..