#reactjs #react-router #react-router-dom
Вопрос:
То, Что Я Пытаюсь Сделать:
Создайте список с помощью API, в котором перечислены несколько команд, каждая из которых связана с новой страницей команды через свой идентификатор команды. Пример:
Домашняя страница: Localhost:3000/
Перечисляет несколько вариантов:
Search By Team
Search By Player
нажмите на Поиск по командам, указав каждую команду Localhost:3000/команды
Gladiators
Maniacs
Нажмите на локальный хост Maniacs:3000/Маньяки
До сих пор, когда я нажимаю на каждую команду, она ведет меня на страницу 404.
То, Что У Меня Есть Сейчас:
App.js
<Route path="/teams" component={Teams} exact></Route>
<Route exact path='/:teamName' component={EachTeam} />
Standings.js
import Atlantic from "../components/divisions/Atlantic"
function Standings() {
return (
<div className="teams-container">
<Atlantic />
</div>
)
}
export default NHLStandings
Altantic.js
import { Link } from 'react-router-dom';
import { useState, useEffect } from 'react';
function Atlantic() {
const [teams, setTeams] = useState(null);
useEffect(() => {
getData();
async function getData() {
const response = await fetch("RANDOM_API);
const data = await response.json();
setTeams(data) ;
}
}, []);
return (
<div className="container">
{teams amp;amp; (
<div className="container">
<h2>Atlantic Division</h2>
{teams['teams'].map((team, index) => (
(team.division.name === "Atlantic" amp;amp; (
<Link
to={`/${team.teamName}`}
teamName={team.teamName}
key={index}
className="team-container"
>
<h2>{team.name}</h2>
</Link>
))
))}
</div>
)}
</div>
)
}
экспорт по умолчанию Атлантический
EachTeam.js
import { Link } from 'react-router-dom';
import { useState, useEffect, useSelector } from 'react';
function EachTeam(props) {
return (
<div className="container">
<h1>{props.teamName}</h1>
</div>
)
}
export default EachTeam
Приношу извинения за длинноту, я не хотел ничего опускать. Заранее спасибо за любую помощь.
Комментарии:
1. Если я не ошибаюсь — вы не должны использовать exact во втором маршруте
2. К сожалению, это не помогло. URL-адрес по — прежнему обновляется динамически, и никакая информация не передается.
Ответ №1:
teamName
не является допустимой опорой ни Link
для компонента, ни Route
для компонента. Посторонние реквизиты игнорируются. Я подозреваю, что вы правильно ориентируетесь и просто видите props.teamName
, что не определено.
{teams['teams'].map((team, index) => (
(team.division.name === "Atlantic" amp;amp; (
<Link
to={`/${team.teamName}`}
teamName={team.teamName} // <-- ignored, not a Link prop
key={index}
className="team-container"
>
<h2>{team.name}</h2>
</Link>
))
))}
Для решения вы можете получить доступ к параметрам соответствия маршрута, чтобы получить teamName
. В компонентах функций используйте крючок реакции useParams.
Дано:
<Route exact path='/:teamName' component={EachTeam} />
Каждая команда
import { useParams } from 'react-router-dom';
function EachTeam(props) {
const { teamname } = useParams();
return (
<div className="container">
<h1>{teamName}</h1>
</div>
)
}
Комментарии:
1. Вот и все! Спасибо, я действительно ценю вашу помощь.