I have written below routes in App.js –
function App() { return ( <> <BrowserRouter> <Switch> <Route path="/" exact component={Dashboard} ></Route> <Route path="/details/:index" exact component={ItemDetails} ></Route> <Dashboard></Dashboard> </Switch> </BrowserRouter> </> ); } export default App;
I have another component – Items which has Card (Reactstrap). Each card is having a Link –
function Items(props) { console.log(props.index.index) return ( <Link to={{pathname:"/details",param1:props.index.index}}> <Card tag="a" key={props.index.index} style={{display:'flex',width:'25%',flexWrap:'nowrap',float:'left',cursor: "pointer"}} > <CardBody> <CardTitle> {props.card.card.value} </CardTitle> </CardBody> </Card> </Link> ) } export default Items
Within Link tag , to attribute , I have mentioned –
to={{pathname:"/details",param1:props.index.index}}
By this I am expecting , upon clicking of card , component – ItemDetails
should get rendered.
But I cannot see , ItemDetails has got rendered.
Do I need to add anything else within my current code ?
Advertisement
Answer
You can use the useHistory
hook which solve this problem easily
import React from 'react' import {useHistory} from 'react-router-dom' function Items({index, card}) { const history = useHistory() function navigateTo(){ history.push(`/details/${index.index}`) } return ( <Card onClick={navigateTo} tag="a" key={props.index.index} style={{display:'flex',width:'25%',flexWrap:'nowrap',float:'left',cursor: "pointer"}} > <CardBody> <CardTitle> {card.card.value} </CardTitle> </CardBody> </Card> ) } export default Items