Je travaille actuellement sur le projet react qui est une application de connexion avec reactstrap. Mais je suis confronté à un problème lorsque j'utilise Link dans le composant d'inscription afin de lier le composant de connexion. Aidez-moi à résoudre ce problème.
component / signup.js:
import React, { Component } from 'react' import Signup from './component/signup' import './App.css'; class App extends Component { render() { return ( <Signup /> ) } } export default App
component / login.js: strong>
import React, { Component } from 'react' import '../App.css'; import {Button , Form, FormGroup, Label, Input} from 'reactstrap' export class Login extends Component { render() { return ( <Form className="login-form App"> <h4 className="font-weight-bold text-center"> Login Form</h4> <FormGroup> <Label>Email</Label> <Input type="email" placeholder="Email Address"></Input> </FormGroup> <FormGroup> <Label>Password</Label> <Input type="password" placeholder="Password"></Input> </FormGroup> <Button type="submit" className="btn-primary btn-lg btn-block">Login</Button> </Form> ) } } export default Login
App.js:
import React, { Component } from 'react' import {Link} from 'react-router-dom' import '../App.css'; import {Button , Form, FormGroup, Label, Input} from 'reactstrap' export class signup extends Component { render() { return ( <Form className="login-form App"> <h4 className="font-weight-bold text-center"> Sign Up Form</h4> <FormGroup> <Label>Full Name</Label> <Input type="text" placeholder="Full Name"></Input> </FormGroup> <FormGroup> <Label>Email</Label> <Input type="email" placeholder="Email Address"></Input> </FormGroup> <FormGroup> <Label>Password</Label> <Input type="password" placeholder="Password"></Input> </FormGroup> <Button type="submit" className="btn-primary btn-lg btn-block">Sign Up</Button> <p>Already Signup, <Link to ="/Login">Login</Link></p> </Form> ) } } export default signup
3 Réponses :
Vous devez définir l'itinéraire Login
dans votre App.js
:
import React, { Component } from 'react' import Signup from './component/signup' import Login from './component/login' //Login should also be imported import './App.css' import { BrowserRouter as Router, Route } from "react-router-dom"//Router class App extends Component { render() { return ( <Router> {/* Creating applications routes */} <Route exact path="/" component={Signup} /> {/*Signup Route*/} <Route exact path="/Login" component={Login} /> {/*Login Route*/} </Router> ) } } export default App
Remarquez que j'ai défini votre inscription à la racine de votre application ( /
). Vous pouvez le pointer où vous le souhaitez et vous devrez peut-être définir d'autres itinéraires dans votre App.js
Il manque une partie importante de votre code:
Link
est toujours encapsulé avec le composant Router
Lier
le composant, vous disposez d'un composant Switch
contenant le composant Route
. Voici un exemple de code pour utiliser Link, Route, Router & Switch. J'espère que cela vous aidera
import React, { Component } from "react"; import ReactDOM from "react-dom"; import { Route, Link, BrowserRouter as Router, Switch } from "react-router-dom"; import "./styles.css"; const User = ({ match }) => { console.log(match); return <h1>User: {match.params.id}</h1>; }; class Users extends Component { render() { return ( <div> <h1>Users</h1> <h2>Select a user</h2> <li> <Link to="/user/1">user 1</Link> </li> <li> <Link to="/user/2">user 2</Link> </li> <li> <Link to="/user/3">user 3</Link> </li> <Route path="/user/:id" component={User} /> </div> ); } } class Contact extends Component { render() { return ( <div> <h1>Contact</h1> </div> ); } } function App() { return ( <div> <h1>Home</h1> </div> ); } function NotFound() { return <h1>Not Found</h1>; } const routing = ( <Router> <div> <ul> <li> <Link to="/">home</Link> </li> <li> <Link to="/users">users</Link> </li> <li> <Link to="contact">contact</Link> </li> </ul> <Switch> <Route exact path="/" component={App} /> <Route path="/users" component={Users} /> <Route path="/contact" component={Contact} /> <Route component={NotFound} /> </Switch> </div> </Router> ); const rootElement = document.getElementById("root"); ReactDOM.render(routing, rootElement);
Démo CodeSandbox: démo de code de travail
Merci beaucoup!!
Lorsque vous souhaitez utiliser le composant Link
pour définir les liens de votre composant. Vous devez utiliser au plus haut niveau de votre arborescence de composants le composant BrowserRouter
de react-router-dom
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom'; import { React } from 'react'; import { Signup } from './component/signup'; import { Login } from './component/Login'; export default function App(props) { return ( <div> // Any code goes here <Router> <Switch> <Route exact={true} path="/login" component={Login}/> <Route exact={true} path="/signup" component={Login}/> <Redirect path="/login" /> </Switch> </Router> // Any code goes here </div> ) }
Après avoir utilisé Router pour définir quel composant est rendu sur un chemin donné dans le composant le plus élevé de l'arborescence des composants, vous pouvez utiliser Link
dans n'importe quel composant enfant
Merci beaucoup !!
@Yves, veuillez tester votre code et corriger cette ligne:
, component = {Signup} code>
github.com/ ReactTraining / react-router / blob / master / packages /…
Avez-vous défini l'itinéraire
/ Login
?Pouvez-vous exprimer quel problème que vous rencontrez? À quoi vous attendez-vous et ce qui se passe réellement.
Quelle est l'erreur que vous rencontrez?
Vous devez ajouter une route de connexion à votre App.js
vous pouvez utiliser comme ceci {title}