reactjs react-router react-router-dom

reactjs - React Router v4 renderiza mĂșltiples rutas



react-router react-router-dom (3)

Aquí hay un ejemplo del tutorial oficial , cómo evitar renderizar múltiples rutas

import { Switch, Route } from ''react-router <Switch> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/> </Switch>

Estoy creando un SPA y estoy tratando de configurar el enrutamiento en la aplicación usando el paquete react-router-dom versión 4.1.1 .

Mi definición de ruta está abajo:

<BrowserRouter> <div> <Route exact path="/" component={Login} /> <Route path="/login" component={Login} /> <Route path="404" component={NotFound} /> <Route path="*" component={NotFound} /> </div> </BrowserRouter>

Básicamente, quiero configurar el enrutamiento para que cualquier solicitud a una página para la que no se haya definido una ruta vaya al componente {NotFound} .

¿Cómo se puede lograr esto? La solución anterior representa tanto el Login como el componente NotFound al solicitar la página /login .

Saludos cordiales


Creo que la página NotFound se representa debido a la <Route path="*" component={NotFound} /> regla. La propiedad de ruta del enrutador acepta cualquier ruta URL válida que comprenda path-to-regexp. Entonces ''*'' significa cero o más coincidencias de parámetros


Utilice Switch para representar la primera coincidencia de la ruta. Debe importar Switch antes de usar

import {Switch} from ''react-router''; <BrowserRouter> <Switch> <Route exact path="/" component={Login} /> <Route path="/login" component={Login} /> <Route path="404" component={NotFound} /> <Route path="*" component={NotFound} /> </Switch> </BrowserRouter>

De acuerdo con los docs

<Switch> es único en el sentido de que representa una ruta exclusivamente. Por el contrario, cada <Route> que coincide con la ubicación se representa de manera inclusiva.

Ahora, si estamos en /login , <Switch> comenzará a buscar una <Route> coincidente. <Route path="/login"/> coincidirá y <Switch> dejará de buscar coincidencias y mostrará <Login> . de lo contrario, la ruta coincide /login con /login y * y representa ambas rutas

Sin embargo, cuando utilice Cambiar el orden de las rutas, asegúrese de agregar las rutas de prefijo después de las otras rutas. Por ejemplo, ''/ home'' debe estar después de ''/'' en el orden de la ruta o, de lo contrario, puede utilizar el accesorio exact

<Switch> <Route exact path="/" component={Login} /> <Route path="/home" component={Home} /> </Switch>