switch source react link example doom reactjs react-router

reactjs - source - react router switch



reaccionar página predeterminada del router v4(página no encontrada) (4)

Aunque la solución de aceptación proporciona la respuesta, no funcionaría cuando haya anidado rutas

Por ejemplo, si el componente Home tiene rutas anidadas como /home , /dashboard y si la url visitada es /db , mostraría un componente NotFound solo dentro de la sección Ruta, pero no la página en su conjunto.

Para evitar esto, puede seguir con un simple ajuste del uso de un componente y un proveedor

const NoMatch = (props) => ( <Redirect to={{state: {noMatch: true}}} /> ) const ProviderHOC = (NotFoundRoute) => { const RouteProvider = (props) => { if(props.location && props.location.state && props.location.noMatch) { return <NotFoundRoute {...props} /> } return props.children; } return withRouter(RouteProvider) } export default ProviderHOC;

Y luego puedes usarlo como

const RouteManager = ProviderHOC(NotFoundComponent); <Router> <RouteManager> <Switch> <Route path="/" exact component={Home}/> <Redirect from="/old-match" to="/will-match"/> <Route path="/will-match" component={WillMatch}/> <NoMatch /> </Switch> </RouteManager> </Router>

y dentro del componente Home

render() { return ( <Switch> <Route path="/home" component={NewHome} /> <Route path="/dashboard" component={Dashboard} /> <NoMatch /> </Switch> ) }

Este es un propósito común, dirigir la solicitud no coincidente a la página no encontrada.

hacer esto con react-router v4 se parece a las versiones anteriores y espero que este ejemplo funcione a continuación. Los enlaces funcionan bien, pero espero que el componente NotFound llamado solo se solicite una URL desconocida; Pero siempre está ahí.

import { BrowserRouter as Router, Route, Link } from ''react-router-dom'' class Layout extends Component { render() { return ( <Router> <div className="App"> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/user">User</Link></li> </ul> <Route exact path="/" component={Home}/> <Route path="/user" component={User}/> <Route path="*" component={Notfound}/> </div> </Router> ); } }

es como path="*" representa todas las solicitudes y el componente no encontrado siempre allí, pero ¿cómo puedo decir que oculte este componente para una ruta URL válida?


Esta es mi solución con dos componentes.

const NotFound = () => <div>Not found</div> const NotFoundRedirect = () => <Redirect to=''/not-found'' /> //root component <Switch> <Route path=''/users'' component={UsersPages} /> <Route path=''/not-found'' component={NotFound} /> <Route component={NotFoundRedirect} /> </Switch> //UsersPages component <Switch> <Route path=''/home'' component={HomePage} /> <Route path=''/profile'' component={ProfilePage} /> <Route component={NotFoundRedirect} /> </Switch>

Ese trabajo perfecto para mi. Gracias.


La documentación de React No Router cubre esto. Debe importar el componente <Switch> , luego puede eliminar el atributo de path completo.

Un <Switch> representa el primer elemento secundario <Route> que coincide. Un <Route> sin ruta siempre coincide

Este es el ejemplo que usa:

<Router> <div> <Switch> <Route path="/" exact component={Home}/> <Redirect from="/old-match" to="/will-match"/> <Route path="/will-match" component={WillMatch}/> <Route component={NoMatch}/> </Switch> </div> </Router>

Entonces, en su caso, simplemente suelte la path="*" e introduzca el <Switch> :

<Switch> <Route exact path="/" component={Home}/> <Route path="/user" component={User}/> <Route component={Notfound} /> </Switch>

Recuerde incluir Switch a su declaración de import en la parte superior.


No me funciona, particularmente uno está usando esta config

Entonces, tengo que verificar la ruta en la función de representación del componente de la página de inicio. Algo como esto:

render(){ const {match, location, history} = this.props; if (location.pathname === ''/''){ return (<div>Home</div>) }else{ return null } }