Как я могу разбить React Router на несколько файлов - PullRequest
0 голосов
/ 19 сентября 2018

Мой файл маршрутов становится довольно грязным, поэтому я решил разделить их на отдельные файлы.

Моя проблема в том, что, если я использовал 2 отдельных файла, то, что произойдет после первого включения, не будет обработано:

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>
);

Если я переключу Faq с registration, тогда всеFaq маршруты будут работать.

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;

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Ваш код будет переведен примерно так:

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>
);

Это неправильный способ реализации маршрутизации с react-router-dom или React-Router v4.

. Для правильной реализации Выможно увидеть этот пример .

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;
0 голосов
/ 19 сентября 2018

Попробуйте следующее

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...