J'essaye de rediriger vers un composant en cliquant sur un bouton, voici ce que j'ai fait:
import { Redirect, Router } from "react-router-dom";
class Home extends React.Component {
state = {
buttonState: ""
};
constructor(props) {
super(props);
this.buttonOnClick = this.buttonOnClick.bind(this);
}
buttonOnClick(e) {
this.setState({ buttonState: e.target.id }, () => {
console.log(this.state.buttonState);
});
}
render() {
if (this.state.redirect) {
let url = "/" + this.state.redirect;
console.log(url);
return (
<Router>
<Redirect to={url} />
</Router>
);
} else {
return (
<div>
<button id={"users"} onClick={this.buttonOnClick}>
See all users
</button>
<button id={"others"} onClick={this.buttonOnClick}>
other
</button>
</div>
);
}
}
}
export default Home;
Ici, il console.log parfaitement, mais il ne redirige pas. p>
Comment résoudre ce problème?
3 Réponses :
Premièrement, j'ai découvert que vous n'avez pas déclaré redirect sous votre variable state , la seule variable qui s'y trouve est buttonState .
Cependant, je voudrais suggérer une autre façon de rediriger.
Vous pouvez envelopper chaque bouton sur une balise Link . Ce serait
<Link to="/your_route_here"> <button ...> </button> </Link>
Vous pouvez également vous référer à la doc officielle de react-router-dom pour la balise Link ici .
je peux vous lier, je veux utiliser la redirection spécifiquement
Ok si vous voulez rediriger vers un chemin qui se trouve dans votre projet, vous pouvez le faire en utilisant ce code:
onClick = () =>
windows.location.href = 'your route'
et si vous voulez rediriger l'utilisateur vers un chemin qui est ne se trouvant pas dans votre projet, utilisez ce code:
onClick = () =>
this.props.history.push('your route');
<Router>
<Redirect to={url} />
</Router>
This will work, see my codesandbox.io