Дочерний компонент не рендерится в React Router v4 - PullRequest
0 голосов
/ 23 октября 2018

Я пробую свои силы на вложенной маршрутизации React, и вот так выглядит мое приложение

Posts.js (родительский (множественное число) компонент), который хорошо отрисовывается.

import React from "react";
import { Route } from "react-router-dom";


import Post from "./Post";
import { Link, Switch } from "react-router-dom";


const Posts = ({ match }) => {
 return (
    <div>
        <h2>Topics</h2>
        <ul>
            <li>
                <Link to={`${match.url}/rendering`}>Rendering with React</Link>
            </li>
            <li>
                <Link to={`${match.url}/components`}>Components</Link>
            </li>
            <li>
                <Link to={`${match.url}/props-v-state`}>Props v. State</Link>
            </li>
        </ul>

        <div>

            <Route path={`${match.path}/:topicId`} component={Post} />
            <Route
                exact
                path={match.path}
                render={() => <h3>Please select a topic.</h3>}
            />
        </div>

    </div>
)}

export default Posts;

Post Component (Child (Singular) Component)

import React from "react";

const Post = ({ match }) => (
 <div>
    <h1>Child component</h1>
    <h3>{match.params.topicId}</h3>
 </div>
 );
export default Post;

Не уверен, что здесь не хватает конфигурации, родительский компонент хорошо отрисовывает на маршруте, в то время как содержимое дочернего компонента не рендерит

В консоли нет ошибок.


Конфигурация родительской маршрутизации

import React from "react";
import { Switch, Route,NavLink } from "react-router-dom";

import Home from "./container/home/Home";
import About from "./container/about/About";
import Posts from "./container/post/posts";
import PageNotFound from "./container/Error/404";

const routes = () => (
 <Switch>
    <Route path="/" exact component={Home}></Route>
    <Route path="/about" component={About}></Route>
    <Route exact path="/post" component={Posts}></Route>
    <Route component={PageNotFound}> </Route>*/}
  </Switch>

  )


 export default routes;

App.js

import React, { Component } from 'react';
import './App.css';
import Layout from "./hoc/layout/layout";



class App extends Component {
 render() {
  return (
    <Layout></Layout>
 );
}}

export default App;

1 Ответ

0 голосов
/ 23 октября 2018

Так что ошибка в вашем коде довольно тривиальна.В родительском маршруте, то есть маршруте, который отображает компонент Posts, у вас есть ключевое слово exact, и поэтому Routes подобно /posts/:postId не будет соответствовать этому точному маршруту с путем /post и, следовательно, внутренним маршрутам иливложенные дочерние маршруты не будут работать

Вам необходимо изменить конфигурацию маршрутов, например

const routes = () => (
     <Switch>
        <Route path="/" exact component={Home}></Route>
        <Route path="/about" component={About}></Route>
        <Route path="/post" component={Posts}></Route>
        <Route component={PageNotFound}> </Route>*/}
      </Switch>
  )

  export default routes;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...