Этого можно достичь, используя Link
с to
в качестве объекта , который выставляет state
, который может быть передан полученному Route
:
// ...
// pass game object to Game component
// if you are passing game, you probably don't need other props explicitly passed
{games.length > 0 ? (
games.map(game => {
return <Game
key={game.id}
game={game}
icon={game.image.icon_url}
gameTitle={game.name}
/>
})
) : (
console.log(this.state.title)
)
}
// ...
const Game = (props) => {
const { icon, gameTitle, game } = props;
return (
<div className="games-container">
<div className="game-box">
<img src={icon} alt="icon" />
<Link to={{ pathname: "/details", state: { game } }}>
<p><strong>{gameTitle}</strong></p>
</Link>
</div>
</div>
);
}
Затем вы можете получить доступ к этому state
из реквизита местоположения , которое react-router-dom
вводит в props
:
const GamesDetails = (props) => {
const { image: { icon_url: icon }, release, genres, summary } = props.location.state.game;
return (
<div className="details-content">
<div className="game-info">
<h1>Game Details</h1>
<div className="box-art">
<img src={icon} alt="box art" />
</div>
<div className="release-date">
<h3>Release Data</h3>
<p>{release}</p>
</div>
<div className="genres">
<h3>Genres</h3>
<p>{genres}</p>
</div>
<div className="summary">
<h3>Summary</h3>
<p>{summary}</p>
</div>
</div>
</div>
);
}
Вот пример в действии.
Надеюсь, это поможет!