При маршрутизации компонент не отображается на боковой странице

#reactjs #rxjs #react-router

#reactjs #rxjs #реагировать-маршрутизатор

Вопрос:

Это js-файл, в который я добавил свой маршрутизатор, и он содержит весь маршрут моего маршрутизатора приложений. Ниже приведен код моего App.js

 export default class App extends Component {
    static displayName = App.name;
    render() {
        return (
            <Router>
                <Layout />
                <Switch>
                    <Route path='/employee' exact component={Employee} />
                    <Route path='/employer' component={Employer} />
                    <Route path='/addEmployer' component={AddEmployer} />
                    <Route path='/user' component={UserManagement} />
                    <Route path='/addUser' component={AddUser} />
                </Switch>
            </Router>
        );
    }
}
  

Я создал страницу макета, которая также содержит мой компонент панели навигации, компонент боковой панели, основное содержимое и нижний колонтитул.
Ниже приведен код Layout.js . Я хочу, чтобы мой макет был статичным во всем приложении

 import React, { Component } from 'react';
import { Container } from 'reactstrap';
import '../../css/main.css';

import { Navbar } from './Navbar';
import { Footer } from './Footer';
import { SideNavbar } from './SideNavbar';

export class Layout extends Component {
    static displayName = Layout.name;
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <div>
                <Navbar />
                <div id="layoutSidenav">
                    <SideNavbar />
                    <div id="layoutSidenav_content">
                        <main className="flex">
                            {this.props.children}
                        </main>
                        <Footer />
                    </div>
                </div>
            </div>
        );
    }
}
  

Когда я маршрутизирую работодателя по URL, компонент работодателя не отображается в основной папке.
в настоящее время он отображается под нижним колонтитулом страницы. Это вызывает проблему при создании моего приложения как SPA.

Ожидание ответа

Ответ №1:

Проблема

Похоже, что ваш Layout компонент предназначен для отображения содержимого как children , но в вашем App компоненте вы не передаете ему никаких дочерних элементов. Отображается Switch под / после Layout компонента.

 class Layout extends Component {
  static displayName = Layout.name;
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
        <Navbar />
        <div id="layoutSidenav">
          <SideNavbar />
          <div id="layoutSidenav_content">
            <main className="flex">
              {this.props.children} // <-- content
            </main>
            <Footer />
          </div>
        </div>
      </div>
    );
  }
}

class App extends Component {
  static displayName = App.name;
  render() {
    return (
      <Router>
        <Layout /> // <-- no children
        <Switch>
          <Route path='/employee' exact component={Employee} />
          <Route path='/employer' component={Employer} />
          <Route path='/addEmployer' component={AddEmployer} />
          <Route path='/user' component={UserManagement} />
          <Route path='/addUser' component={AddUser} />
        </Switch>
      </Router>
    );
  }
}
  

Решение

Оберните Switch .

 class App extends Component {
  static displayName = App.name;
  render() {
    return (
      <Router>
        <Layout>
          <Switch>
            <Route path='/employee' exact component={Employee} />
            <Route path='/employer' component={Employer} />
            <Route path='/addEmployer' component={AddEmployer} />
            <Route path='/user' component={UserManagement} />
            <Route path='/addUser' component={AddUser} />
          </Switch>
        </Layout>
      </Router>
    );
  }
}
  

Ответ №2:

Маршрутизатору необходимо определить, где мы хотели отобразить наш компонент. Как и в моем случае, он должен находиться под самим компонентом макета, а не определяющим в App.js часть