728x90
์นดํ ๊ณ ๋ฆฌ๋ฅผ ํด๋ฆญํ๋ฉด ์นดํ ๊ณ ๋ฆฌ์ ํด๋น๋๋ ์ํ๋ง ์ํ๋ชฉ๋ก์ ์ถ๋ ฅํ๊ฒ ๋ง๋ค๊ฑฐ์
์นดํ ๊ณ ๋ฆฌ link ๋ ์๋์ ๊ฐ๋ค.
link={`/products?category=${category.name}`}
category name์ด ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ์ ๋ฌ๋๋ค.
ProductsList.jsx์์ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ฐ๋๋ค.
//sidebar์์ ์นดํ
๊ณ ๋ฆฌ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ฐ์์จ๋ค.
const [search, setSearch] = useSearchParams();
const category = search.get("category"); //๋ชจ๋ ์ฟผ๋ฆฌ์คํธ๋ง ์ค ์นดํ
๊ณ ๋ฆฌ
const ProductsList = () => {
//sidebar์์ ์นดํ
๊ณ ๋ฆฌ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ฐ์์จ๋ค.
const [search, setSearch] = useSearchParams();
const category = search.get("category"); //๋ชจ๋ ์ฟผ๋ฆฌ์คํธ๋ง ์ค ์นดํ
๊ณ ๋ฆฌ
//useDate(url)์ด ๋ค์ด๊ฐ์ผํจ
//๊ฒฐ๊ณผ(res)๋ categories์, error์ ๋ด๋๋ค.
const { data, error, isLoading } = useData(
"/products",
{
params: {
category, //์นดํ
๊ณ ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ ๋ฌ
},
},
[category]
);
์์ฒญ ์ฃผ์์ธ์ ํ๋ผ๋ฏธํฐ๊ฐ ์์ผ๋ฉด ๊ฐ์ฒด ํ์์ผ๋ก ๋ฐ๋๋ค.
useData.js
import { useEffect, useState } from "react";
import apiClient from "../utils/api-client";
const useData = (endpoint, customConfig, deps) => {
const [data, setData] = useState([]);
const [error, setError] = useState("");
const [isLoading, setIsLoading] = useState(false);
useEffect(
() => {
apiClient
.get(endpoint, customConfig)
.then((res) => {
setData(res.data);
setIsLoading(false);
})
.catch((err) => {
setError(err.message);
setIsLoading(false);
});
},
deps ? deps : []
); //deps๊ฐ ์์ผ๋ฉด ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ฐ๋๋๋ง๋ค ๋๋๋ง๋จ
return { data, error, isLoading };
};
export default useData;
url- > endpoint
customConfig -> ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ
โ
dep -> category
useEffect์ ์นดํ ๊ณ ๋ฆฌ๊ฐ ์์๊ฒฝ์ฐ [category] ๊ฐ ๋ฐ๋๋๋ง๋ค ๋ค์ ๋ฆฌ๋ ๋๋งํ๊ณ
์นดํ ๊ณ ๋ฆฌ๊ฐ ์์ผ๋ฉด [ ] ์์ํ ๋ ํ๋ฒ ๋ ๋๋ง.
ํ ์คํธํ๋ค . ์ ํํ ์นดํ ๊ณ ๋ฆฌ์ ๋ง๊ฒ ์ ์ถ๋ ฅ๋๋์ง


'FRONTEND > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [myCart] ์ํ ์์ธ ํ์ด์ง (1) | 2023.12.20 |
|---|---|
| [myCart] ํ์ด์ง๋ค์ด์ (0) | 2023.12.20 |
| [myCart] ๋ฆฌ์กํธ ๋ก๋ฉ ์ค์ผ๋ ํค ์ ์ฉ (0) | 2023.12.20 |
| [myCart] ์ปค์คํ Hook ์์ฑ ํ ์ ์ฉ (0) | 2023.12.20 |
| [myCart] ๋ฆฌ์กํธ ๋ผ์ฐํฐ ์ ์ฉ / axios์ค์น ํ ๋ฐฑ์๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (0) | 2023.12.20 |