Ссылка на CodeSandbox , чтобы увидеть, что я имею в виду.
Когда вы нажимаете кнопку «Просмотреть профиль» на игроке, профиль игрока в настоящее время загружается под карточками. Это связано с тем, что оператор Switch / Router находится непосредственно под платами, поэтому компоненты будут загружаться туда.
Однако я хочу, чтобы, когда кто-то нажимал на кнопку игрока «Просмотр профиля», он загружал подробные данные. профиль и все тут. В настоящее время он действительно перемещается к нужным маршрутам, но для этих маршрутов мне просто нужен подробный профиль. Я не хочу, чтобы он загружал обзоры карт всех трех игроков.
Приложение. js (удалены стилизованные компоненты для краткости):
import React, { useState, useEffect } from "react";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import { Container, Row, Col, Card } from "reactstrap";
import ReactDOM from "react-dom";
import axios from "axios";
import styled from "styled-components";
import { createGlobalStyle } from "styled-components";
import "bootstrap/dist/css/bootstrap.min.css";
import Intro from "./components/Intro";
import Tavares from "./components/Tavares";
import Matthews from "./components/Matthews";
import Marner from "./components/Marner";
import TavaresImg from "./img/tavares.jpg";
import MatthewsImg from "./img/matthews.jpg";
import MarnerImg from "./img/marner.jpg";
import "./styles.css";
function App() {
// Set initial state for data
const [data, setData] = useState({
tavares: [],
matthews: [],
marner: [],
tavaresFull: [],
matthewsFull: [],
marnerFull: []
});
// Fetch data
useEffect(() => {
const fetchData = async () => {
// Grab all players API's
let tavares =
"https://statsapi.web.nhl.com/api/v1/people/8475166?expand=person.stats&stats=yearByYear,careerRegularSeason&expand=stats.team&site=en_nhlCA";
let matthews =
"https://statsapi.web.nhl.com/api/v1/people/8479318?expand=person.stats&stats=yearByYear,careerRegularSeason&expand=stats.team&site=en_nhlCA";
let marner =
"https://statsapi.web.nhl.com/api/v1/people/8478483?expand=person.stats&stats=yearByYear,careerRegularSeason&expand=stats.team&site=en_nhlCA";
// Axios to get all api's
axios
.all([axios.get(tavares), axios.get(matthews), axios.get(marner)])
.then(
axios.spread((tavares, matthews, marner) => {
console.log(tavares.data.people[0].stats[1].splits[0].stat);
setData({
tavares: [tavares.data.people[0]],
matthews: [matthews.data.people[0]],
marner: [marner.data.people[0]],
tavaresFull: [tavares.data.people[0].stats[1].splits[0].stat],
matthewsFull: [matthews.data.people[0].stats[1].splits[0].stat],
marnerFull: [marner.data.people[0].stats[1].splits[0].stat]
});
})
);
};
fetchData();
}, []);
return (
<>
<Router>
<GlobalStyle />
<Intro
main="Maple Leafs API"
text="Built with React, React Hooks, Styled Components and Axios
consuming the NHL's REST API."
/>
<Flex>
<Container>
<RowWrap>
<Row>
<Col lg="4">
<Image>
<img src={TavaresImg} alt="Tavares" />
</Image>
</Col>
<Col lg="8">
<CardBody>
{data.tavares.map(item => (
<>
<Title>
<h1>{item.fullName}</h1>
</Title>
<Number>{item.primaryNumber}</Number>
<p>{item.primaryPosition.name}</p>
</>
))}
<ButtonLink>
<Link to="/tavares">
<button>View Profile</button>
</Link>
</ButtonLink>
</CardBody>
</Col>
</Row>
</RowWrap>
<RowWrap>
<Row>
<Col lg="4">
<Image>
<img src={MatthewsImg} alt="Matthews" />
</Image>
</Col>
<Col lg="8">
<CardBody>
{data.matthews.map(item => (
<>
<Title>
<h1>{item.fullName}</h1>
</Title>
<Number>{item.primaryNumber}</Number>
<p>{item.primaryPosition.name}</p>
</>
))}
<ButtonLink>
<Link to="/matthews">
<button>View Profile</button>
</Link>
</ButtonLink>
</CardBody>
</Col>
</Row>
</RowWrap>
<RowWrap>
<Row>
<Col lg="4">
<Image>
<img src={MarnerImg} alt="Marner" />
</Image>
</Col>
<Col lg="8">
<CardBody>
{data.marner.map(item => (
<>
<Title>
<h1>{item.fullName}</h1>
</Title>
<Number>{item.primaryNumber}</Number>
<p>{item.primaryPosition.name}</p>
</>
))}
<ButtonLink>
<Link to="/marner">
<button>View Profile</button>
</Link>
</ButtonLink>
</CardBody>
</Col>
</Row>
</RowWrap>
</Container>
</Flex>
<Container>
<Row>
<Col lg="12">
<Switch>
<Route
exact
path="/tavares"
component={() => (
<Tavares data={data.tavares} dataFull={data.tavaresFull} />
)}
/>
<Route
exact
path="/matthews"
component={() => (
<Matthews
data={data.matthews}
dataFull={data.matthewsFull}
/>
)}
/>
<Route
exact
path="/marner"
component={() => (
<Marner data={data.marner} dataFull={data.marnerFull} />
)}
/>
</Switch>
</Col>
</Row>
</Container>
</Router>
</>
);
}
export default App;
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);