Делаю сайт по starwars, с одной бесплатной API, и у нее есть различные данные в зависимости от запроса. Всего у нее есть несколько категорий (films, people, starships, planets )и у меня на сайте есть такие вкладки. Вопрос, как сделать изменение API в зависимости от той вкладки в которой находишься ? Пытался разными способами, от useCallback и useState. до помещения на кнопку оператора onClick,
Вот код и не работающий метод,
const films = "films";
const peoples = "people";
const planets = "planets";
const starshipsStr = "starships";
let [url, setUrl] = useState(`https://swapi.dev/api/${films}`);
let navigation = useLocation();
useEffect(() => {
if (navigation.pathname === "/films") {
setUrl(`https://swapi.dev/api/${films}`);
console.log("Вкладка фильмов", url);
} else if (navigation.pathname === "/starships") {
setUrl(`https://swapi.dev/api/${starshipsStr}`);
console.log("Вкладка космических машин", url);
} else if (navigation.pathname === "/people") {
setUrl(`https://swapi.dev/api/${peoples}`);
console.log("вкладка люди", url);
} else if (navigation.pathname === "/planets") {
setUrl(`https://swapi.dev/api/${planets}`);
console.log("вкладка планет", url);
} else {
console.log("Ничего не работает");
}
}, []);
useEffect(() => {
fetch(url)
.then((res) => res.json())
.then((resp) => {
setData(resp.results);
});
}, []);
return (
<>
<Routes>
<Route
element={
<HeaderComponent
data={ArrayBtn}
width={120}
height={120}
color={"white"}
/>
}
>
<Route exact path={"/"} element={<MainPage />} />
<Route path={"/films"} element={<Films value={value} />} />
<Route path={"/starships"} element={<StarCars value={value} />} />
<Route path={"/planets"} element={<Planets value={value} />} />
<Route path={"/peoples"} element={<Peoples value={value} />} />
</Route>
</Routes>
</>
);
}
P.s. метод useLocation() взял из Router-dom v6. Метод value это конечный массив с данными, по умолчанию в API нет картинок, и я их добавлял в ручную, поэтому конечный массив называется по другому