Comment configurer la DefaultRoute sur une autre Route dans le routeur React

j'ai le code suivant:

  <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <DefaultRoute handler={SearchDashboard} />
  </Route>

lors de L'utilisation du DefaultRoute, searchdashboard rend incorrectement car n'importe quel *Dashboard doit être rendu dans le tableau de bord.

je voudrais pour mon DefaultRoute dans la Route "app" pour pointer vers la Route"searchDashboard". Est-ce quelque chose que je peux faire avec le routeur React, ou devrais-je utiliser Javascript normal (pour une redirection de page) pour cela?

en gros, si l'utilisateur accède à la page d'accueil je veux les envoyer plutôt à la recherche du tableau de bord. Donc je suppose que je suis à la recherche d'une fonctionnalité de routeur React équivalente à window.location.replace("mygreathostname.com/#/dashboards/searchDashboard");

42
demandé sur Matthew Herbst 2015-04-10 05:59:44

9 réponses

Vous pouvez utiliser Redirect au lieu de DefaultRoute

<Redirect from="/" to="searchDashboard" />
59
répondu Jonatan Lundqvist Medén 2015-04-19 06:04:57

j'ai été incorrectement en essayant de créer un chemin d'accès par défaut:

<IndexRoute component={DefaultComponent} />
<Route path="/default-path" component={DefaultComponent} />

Mais cela crée deux chemins différents qui rendent le même composant. Non seulement cela n'a pas de sens, mais cela peut causer des problèmes dans votre interface utilisateur, c'est-à-dire lorsque vous avez un style <Link/> en fonction de this.history.isActive().

La bonne façon de créer une route par défaut (qui n'est pas l'indice de la route) est d'utiliser <IndexRedirect/>:

<IndexRedirect to="/default-path" />
<Route path="/default-path" component={DefaultComponent} />

Ceci est basé sur les réagissent-routeur 1.0.0. Voir https://github.com/rackt/react-router/blob/master/modules/IndexRedirect.js.

34
répondu Seth 2015-12-08 00:54:22

Le problème avec l'aide de <Redirect from="/" to="searchDashboard" /> si vous avez une URL différente, dites /indexDashboard et que l'utilisateur appuie sur actualiser ou obtient une URL envoyé, l'utilisateur sera redirigé vers /searchDashboard de toute façon.

Si vous voulez pas que les utilisateurs soient capables d'actualiser le site ou envoyer une Url utiliser ceci:

<Route exact path="/" render={() => (
    <Redirect to="/searchDashboard"/>
)}/>

utilisez ceci si searchDashboard est derrière login:

<Route exact path="/" render={() => (
  loggedIn ? (
    <Redirect to="/searchDashboard"/>
  ) : (
    <Redirect to="/login"/>
  )
)}/>
24
répondu Ogglas 2017-05-13 21:09:59

<IndexRoute component={Home}/>.

dans le cas de Matthew, je crois qu'il voudrait:

<IndexRoute component={SearchDashboard}/>.

https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ComponentLifecycle.md

9
répondu dwilt 2015-10-14 07:16:44

Pour ceux qui viennent en 2017, c'est la nouvelle solution avec IndexRedirect:

<Route path="/" component={App}>
  <IndexRedirect to="/welcome" />
  <Route path="welcome" component={Welcome} />
  <Route path="about" component={About} />
</Route>
2
répondu Kevin Hernandez 2017-11-02 00:40:14
 <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <Redirect from="/*" to="/" />
  </Route>
1
répondu user3889017 2016-11-18 19:46:26

la méthode préférée est d'utiliser le routeur react IndexRoutes composant

Vous l'utilisez comme ceci (tiré du routeur react docs lié ci-dessus):

<Route path="/" component={App}>
    <IndexRedirect to="/welcome" />
    <Route path="welcome" component={Welcome} />
    <Route path="about" component={About} />
</Route>
1
répondu Marc Costello 2017-03-02 18:00:05

j'ai rencontré un problème similaire, je voulais une route par défaut, le gestionnaire si aucun gestionnaire d'itinéraire de correspondance.

mes solutions consistent à utiliser un caractère de remplacement comme valeur de chemin. IE Assurez-vous également que c'est la dernière entrée dans vos itinéraires de définition.

<Route path="/" component={App} >
    <IndexRoute component={HomePage} />
    <Route path="about" component={AboutPage} />
    <Route path="home" component={HomePage} />
    <Route path="*" component={HomePage} />
</Route>
0
répondu Anextro 2017-04-30 02:16:31
import { Route, Redirect } from "react-router-dom";

class App extends Component {
  render() {
    return (
      <div>
        <Route path='/'>
          <Redirect to="/something" />
        </Route>
//rest of code here

cela fera en sorte que lorsque vous chargez le serveur sur l'hôte local, il ré vous diriger vers /quelque chose

0
répondu Marshall Lanners 2018-10-03 21:32:51