reactjs - react - ¿Por qué mi componente sigue renderizando en todas las rutas?
componentes en react (1)
Debe usar un componente <Switch> . Por la documentación:
¿Cómo es esto diferente a solo usar un montón de
<Route>s?
<Switch>es único en el sentido de que representa una ruta exclusivamente . Por el contrario, cada<Route>que coincida con la ubicación se representa de forma inclusiva . Considera este código:
<Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/>Si la URL es
/about, entonces se<NoMatch><About>,<User>y<NoMatch>porque todos coinciden con la ruta. Esto es por diseño, lo que nos permite componer<Route>s en nuestras aplicaciones de muchas maneras, como barras laterales y migas de pan, pestañas de arranque, etc.Ocasionalmente, sin embargo, queremos elegir solo una
<Route>para renderizar. Si estamos en/about, no queremos también hacer coincidir/:user(o mostrar nuestra página "404").
Por lo tanto, importarlo desde react-router-dom :
import { Route, RouteComponentProps, Switch } from ''react-router-dom'';
Luego, aplíquelo de esa manera (tenga en cuenta que no es necesario path="*" ):
<Switch>
<Route path="/" exact={true} component={ElementList} />
<Route path="/addelement" component={(props:
RouteComponentProps<{}>) => (
<AddElement onSubmitSuccess={() => props.history.push("/")} />
)} />
<Route component={NotFound}/>
</Switch>
Estoy intentando representar un componente cuando ingreso una URL que no existe. Sin embargo, el componente mantiene la representación en todas las rutas. Estoy usando [email protected] . Estas son las rutas que configuré:
import * as React from "react";
import { Route, RouteComponentProps } from "react-router-dom";
import glamorous from "glamorous";
import ElementList from "./elementlist";
import AddElement from "./addelement";
import NotFound from "./NotFound";
const Styling = glamorous.div({
minHeight: 5,
minWidth: 8
});
const NavRouter = () => (
<Styling>
<Route path="/" exact={true} component={ElementList} />
<Route path="/addelement" component={(props:
RouteComponentProps<{}>) => (
<AddElement onSubmitSuccess={() => props.history.push("/")} />
)} />
<Route path="*" exact={true} component={NotFound}/>
</Styling>
);
export default NavRouter;
Este es mi componente NotFound :
import * as React from "react";
const NotFound = () => (
<h1>The page that you are looking is not there.</h1>
);
export default NotFound;
El problema que estoy enfrentando actualmente es que el mensaje: The page that you are looking is not there. sigue apareciendo en la ruta / y /addelement cuando cambié la URL. Me está costando hacer que el mensaje aparezca solo cuando voy a una ruta que no está definida. Inicialmente, traté de cambiar las rutas y hacer la ruta más "detallada" en la parte superior de esta manera:
const NavRouter = () => (
<Styling>
<Route path="/addelement" component={(props:
RouteComponentProps<{}>) => (
<AddElement onSubmitSuccess={() => props.history.push("/")} />
)} />
<Route path="/" exact={true} component={ElementList} />
<Route path="*" component={NotFound}/>
</Styling>
);
Sin embargo, no resolvió el problema. ¿Hay alguna forma de evitar que el mensaje aparezca en todas las rutas a las que voy, a excepción de las rutas que no están definidas?