¿Cómo puedo dividir Reaccionar Router en varios archivos

votos
2

Mi archivo de rutas es cada vez más complicado, así que decidí dividir a cabo en archivos separados.

Mi problema es que si utilicé 2 archivos separados, lo que ocurra después del primer incluyen no consigue prestado:

const routes = (
  <div>
    <Switch>
      <Route exact path=/ component={Home} />
      {Registration} //Does get rendered

      //Everything below this does not get a route
      {Faq}
      <Route path=/login component={login} />
      <Route component={NoMatch} />
    </Switch>
  </div>
);

Si cambio Faqde registrationentonces todas las rutas Preguntas funcionarán.

RegistrationRoutes.js

import Introduction from '../containers/Registration/Introduction';
import Login from '../containers/Login';

const Routes = (
  <Switch>
    <Route path=/login component={Login} key=login />,
    <Route path=/registration/introduction component={Introduction} key=registration-intro />
  </Switch>
);
export default Routes;

FaqRoutes.js

import Faq from '../containers/Faq';
import faqJson from '../json_content/faq/faq';
import FaqCategory from '../containers/Faq/faqCategory';

const Routes = (
  <Switch>
    <Route path=/faq/:category component={FaqCategory} key=faqCat />
    <Route path=/faq render={props => <Faq data={faqJson} />} key=faq />
  </Switch>
);
export default Routes;
Publicado el 19/09/2018 a las 17:09
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Su código se traduce a algo como esto,

const routes = (
  <div>
    <Switch>
      <Route exact path="/" component={Home} />
      <Switch>
         <Route path="/login" component={Login} key="login" />,
         <Route path="/registration/introduction" 
             component={Introduction} key="registration-intro" />
      </Switch>

      //Everything below this does not get a route
      {Faq}
      <Route path="/login" component={login} />
      <Route component={NoMatch} />
    </Switch>
  </div>
);

Esta es la manera equivocada de implementar enrutamiento con react-router-domo React-Router v4.

Por forma correcta de aplicación Se puede ver este ejemplo .

index.js

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Switch, Route, Link } from "react-router-dom";

import LandingPage from "../Registration";

const Home = () => {
  return <div>
  Home Component
   <Link to="/auth/login">Login</Link>
  </div>;
};

function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <BrowserRouter>
        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/auth" component={LandingPage} />
        </Switch>
      </BrowserRouter>
    </div>
  ); 
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Registration.js

import React, { Component } from 'react';
import { Switch, Route, Link, Redirect } from 'react-router-dom';
const LoginRegister = (props) => {
  return (
    <div>
      Login or register
    <Link to="/login">Login</Link>
      <br />
      <Link to="/signup" >Signup</Link>
    </div>
  );
}

const Login = (props) =>{
  console.log("login ", props);
  return (
    <div>
      Login Component
    <Link to="/auth/signup" >Signup</Link>
    </div>
  );
} 

const Signup = () => (
  <div>
  Signup component
    <Link to="/auth/login" >Login</Link>
  </div>
);

class LandingPage extends Component {

  render() {
    console.log('Landing page',this.props);
    const loginPath = this.props.match.path +'/login';
    const signupPath = this.props.match.path + '/signup';
    console.log(loginPath);
    return (
      <div className="container" >
      Landing page
        <Switch>
          <Route path={loginPath} component={Login} />
          <Route path={signupPath} component={Signup} />
          <Route path="/" exact component={LoginRegister} />
        </Switch>
      </div>
    );
  }

}

export default LandingPage;
Respondida el 19/09/2018 a las 18:25
fuente por usuario

votos
0

Intente lo siguiente

RegistrationRoutes.js

import Introduction from '../containers/Registration/Introduction';
import Login from '../containers/Login';

const Routes = (
  <React.Fragment>
    <Route path="/login" component={Login} key="login" />,
    <Route path="/registration/introduction" component={Introduction} key="registration-intro" />
  </React.Fragment>
);
export default Routes;
Respondida el 19/09/2018 a las 17:54
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more