Дочерний маршрут не отображает React-роутер - PullRequest
0 голосов
/ 22 сентября 2018

Я разделил маршруты к другому файлу ниже, это код.когда я пытаюсь перейти / дочерний маршрут, ничего не отображается. Это убивает мое время

rout.js: -

import  App  from "./components/app";
import  Post  from "./components/post";

export const routes = [
    {
      component: App,
      path: '/',
      childRoutes: [{
        path: 'child',
        component: Post
    }]
    },
    {
        component: Post,
        path: '/post',
        childRoutes: [{
          path: 'dashboard',
          component: App
      }]
      }
  ];
index.js:-
 <Router>
      <div>
        <Switch>


         {routes.map(props => <Route exact {...props}>{props.childRoutes.map(e=><Route exact {...e}/>)}</Route>)} 

        </Switch>
      </div>
    </Router>

Ответы [ 2 ]

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

Вы не можете вложить такие маршруты в react-router v4.x (одна из многих причин, почему я предпочитаю v3.0.4).Вы должны указать на один родительский компонент, который затем имеет отдельные Route s, чтобы определить, какой компонент монтировать ИЛИ заполнить метод Route 'render дочерними маршрутами.

Рабочий пример: https://codesandbox.io/s/6zn2103rxw (метод рендеринга - не очень чистый)

Рабочий пример: https://codesandbox.io/s/ll33rmz0n7 (сопоставленные маршруты - снова не очень чистый)

Рабочий пример: https://codesandbox.io/s/8knzzrq5k8 (родительский компонент - легче всего читать и понимать)

routs / index.js

import React from "react";
import { Route } from "react-router-dom";
import Home from "../components/Home";
import Header from "../components/Header";
import FullRoster from "../components/FullRoster";
import Schedule from "../components/Schedule";

export default () => (
  <div>
    <Header />
    <Route exact path="/" component={Home} />
    <Route path="/roster" component={FullRoster} />
    <Route path="/schedule" component={Schedule} />
  </div>
);

компоненты/FullRoster.js (родительский)

import React from "react";
import { Route } from "react-router-dom";
import ShowPlayerRoster from "./ShowPlayerRoster";
import ShowPlayerStats from "./ShowPlayerStats";

export default ({ match }) => (
  <div>
    <Route exact path={match.path} component={ShowPlayerRoster} />
    <Route path={`${match.path}/:id`} component={ShowPlayerStats} />
  </div>
);

компоненты / ShowRoster.js (дочерний)

import map from "lodash/map";
import React from "react";
import { Link } from "react-router-dom";
import PlayerAPI from "../api";

export default () => (
  <div style={{ padding: "0px 20px" }}>
    <ul>
      {map(PlayerAPI.all(), ({ number, name }) => (
        <li key={number}>
          <Link to={`/roster/${number}`}>{name}</Link>
        </li>
      ))}
    </ul>
  </div>
);

компоненты / ShowPlayerStats.js (ребенок)

import React from "react";
import PlayerAPI from "../api";
import { Link } from "react-router-dom";

export default ({ match: { params } }) => {
  const player = PlayerAPI.get(parseInt(params.id, 10));
  return !player ? (
    <div style={{ padding: "0px 20px" }}>
      Sorry, but the player was not found
    </div>
  ) : (
    <div style={{ padding: "0px 20px" }}>
      <h1>
        {player.name} (#{player.number})
      </h1>
      <h2>Position: {player.position}</h2>
      <Link to="/roster">Back</Link>
    </div>
  );
};
0 голосов
/ 22 сентября 2018

Вам также потребуется объявить дочерний путь с предыдущей косой чертой:

childRoutes: [{
   path: '/child',
   component: Post
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...