Je reçois cette erreur essayé différents moyens de routage toujours pas de chance.
J'ai un fichier de configuration de route, c'est-à-dire route.js
const Root = ({ store }) => (
<Provider store={store}>
<BrowserRouter>
<div>
<Route path='/' component={ App }/>
</div>
</BrowserRouter>
</Provider>
)
Maintenant sur App.js
class AppComp extends Component {
render() {
const {match} = this.props;
let navClass = 'active';
if(this.props.sideClass === "nav-ssh") {
navClass = "active-ssh";
}
return (
<div>
<div className="container">
<div className="main">
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
<Redirect to="/home/dashboard" />s
</div>
</div>
</div>
);
}
}
Je veux toujours charger l'application, alors mettez-la au plus haut niveau et l'en-tête et sidenav devraient également être chargés toujours afin qu'ils soient dans l'application.
Pour tout chemin inconnu et pour la première charge, j'ai redirigé vers/home/dashboard
Je comprends qu'il doit arriver à/deux fois donc cet avertissement.
Comment puis-je configurer mon routeur pour obtenir le même résultat et résoudre l'avertissement.
Toute aide serait grandement appréciée.
J'ai résolu le problème. Voici une solution.
<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={ App }/>
</div>
</BrowserRouter>
</Provider>
Sur App.js, ajoutez un chèque match.url === window.location.pathname
ce qui est toujours vrai pour le rendu initial donc '/'
redirige vers '/home/dashboard'
. L'ajout de cette condition résout l'avertissement de redirection.
class AppComp extends Component {
render() {
const {match} = this.props;
let
shouldRedirect = match.url === window.location.pathname,
redirectTo = <Redirect to="/home/dashboard" />;
let navClass = 'active';
if(this.props.sideClass === "nav-ssh") {
navClass = "active-ssh";
}
return (
<div>
<div className="container">
<div className="main">
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
{shouldRedirect && redirectTo}
</div>
</div>
</div>
);
}
}
Mais vous aurez maintenant une limitation, si l'utilisateur entre dans un chemin inconnu, il ne redirigera pas vers '/home/dashboard'
c'est-à-dire vers notre route par défaut.
Pour surmonter cette limitation, vous devez ajouter:
<Switch>
{/*---- your additional routes goes here -----*/}
<Redirect to="/home/dashboard" />
</Switch>
Ajoutez le code ci-dessus aux composants à partir desquels vous gérez le reste du routage. Par exemple, pour moi, j'ai ajouté au composant Sidenav.
Utilisation <Switch>
, au lieu de <div>
pour envelopper les itinéraires.
import React from 'react'
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'
import { LoginScreen, LogoutScreen } from './components'
export default () => (
<div>
<Router>
<Switch>
<Route path='/login' component={LoginScreen}/>
<Route path='/logout' component={LogoutScreen}/>
<Route component={AuthenticatedRoutes}/>
</Switch>
</Router>
</div>
)
Même moi, j'ai fait face à un problème similaire. Il a été résolu pour moi lorsque j'ai ajouté exact dans Route.Switch doit également être ajouté.
<Switch>
<Route exact path='/' component={ App }/>
</Switch>
Je suppose que vous configureriez vos itinéraires comme
<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={ App }/>
</div>
</BrowserRouter>
</Provider>
et App.js as
class AppComp extends Component {
render() {
const {match} = this.props;
let navClass = 'active';
if(this.props.sideClass === "nav-ssh") {
navClass = "active-ssh";
}
return (
<div>
<div className="container">
<div className="main">
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
<Switch>
<Route path='/home/dashboard' component={ Dashboard }/>
<Redirect to='/home/dashboard'/>
</Switch>
</div>
</div>
</div>
);
}
}
Eu ce même problème - essayait de rediriger mais obtenait une erreur et je crois que tout ce dont vous avez besoin est de basculer:
<Route render={()=><Header sideNavClass={this.props.sideNavClass} />} />
<Switch>
<Route render={()=><SideNav navActiveClass={navClass} currentLocation={this.props.location.pathname} />}/>
<Redirect to="/home/dashboard" />
</Switch>
</Route>