My website have 2 pages:
- A main page with some basic data from an API about each currencies and to link to get details about it.
- A page that calls the API a second time and get the details on the currency that the user clicked on.
The way it works is that when the user click on a link, it gives the ID of the currency to the other page, which call the API and get the details.
The problem is that, since I only started learning React, I don’t understand how can I pass the ID when a link is clicked to the other page.
How the App.js is structured:
<div> <MainNavigation/> <Switch> <Route path='/' exact={true}> <MainPage data={this.state.apiResponse}/> </Route> <Route path='/coinDetails'> <CoinDetails/> </Route> </Switch> </div>
How main page links looks like:
<tbody>{props.data.map((coin) => { return <tr key={coin.uuid}> <td><Link to={{pathname:'/coinDetails',state:{uuid:coin.uuid}}}>{coin.symbol}</Link></td> <td><Link to={{pathname:'/coinDetails',state:{uuid:coin.uuid}}}>{coin.price}</Link></td> <td><Link to={{pathname:'/coinDetails',state:{uuid:coin.uuid}}}>{coin.priceDiffInfos.priceDiff24h}</Link></td> <td><Link to={{pathname:'/coinDetails',state:{uuid:coin.uuid}}}>{coin.priceDiffInfos.tauxEvolution24h}</Link></td> <td><Link to={{pathname:'/coinDetails',state:{uuid:coin.uuid}}}>{coin.marketCap}</Link></td> </tr>})} </tbody>
Here’s the detail page so far if it can be useful:
class CoinDetails extends React.Component { constructor(props){ super(props); this.state = {data : ''}; } async getCoinData(){ await fetch('http://localhost:9000/coinDetails?uuid=%27+this.props.props) .then(response => response.json()) .then(data => this.setState({data})) .then(console.log(this.state.data)); } componentDidMount(){ this.getCoinData(); }; render(){ return ( <div> <p>{this.state.data.name}</p> </div>) }; }
The coin details page works fine when I give an ID directly throught a props=”The ID” in the App.js file, the problem is really about how do I get the link to pass the ID of the coin to the details page when a link is clicked ?
I gave code samples of what I thought was relevant to the problem but I can of course give more if needed.
Advertisement
Answer
I think you best approach is use withRouter from react-router-dom
<Route path='/coinDetails/:id' />
then in you onclick function you must redirect to coinDetails/${coin.id}
componentDidMount() { const id = this.props.match.params.id; this.getCoinData(id); } export default withRouter(YourComponent);