简体   繁体   English

为什么 Reactjs 不加载组件内容?

[英]Why Reactjs doesn't load component content?

I'm working on a reactjs front end, and in my app.js i have this following code :我正在研究 reactjs 前端,在我的 app.js 中,我有以下代码:

import React from 'react';
import {BrowserRouter as Router,Route,Switch, Link} from 'react-router-dom';
import Login from './Components/Login.component';
import Register from './Components/Register.component';
import Home from './Components/Home.component';
import Services from './Components/Services.component';
import 'bootstrap/dist/css/bootstrap.css';
import './App.css';

function Index() {
return(
<div className="container-fluid index-container" style={{backgroundImage:"url(indexBackground.png)"}}>
    <nav className="navbar navbar-expand-lg navbar-light index-navbar">
      <a className="navbar-brand" href="#">
        <img className="img-fluid" width="110" src="logo.png" alt="logo"></img>
      </a>
      <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span className="navbar-toggler-icon"></span>
      </button>

      <div className="collapse navbar-collapse" id="navbarSupportedContent">
        <ul className="navbar-nav ml-auto">
          <li className="nav-item">
            <a className="nav-link" href="#">Acceuil</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Actualités</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Nos services</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Nos vehicules</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Contactez-nous</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Blog</a>
          </li>
          <li className="nav-item">
            <a className="nav-link" href="#">Se connecter</a>
          </li>
        </ul>
      </div>
    </nav>
    <div id="index-container-x" className="row d-flex align-items-center" style={{display:"none"}}>
      <div className="col-lg-6 index-container-x justify-content-center">
        <h1 className="white-heading">Découvrez la location longue durée nouvelle génération</h1>
        <hr style={{borderColor:"#fff"}} />
        <Link className="btn btn-primary" to="/Register">S'abonner</Link>
      </div>
    </div>
</div>
 )
}
function App() {
 return (
  <Router>
    <Switch>
    <Route exact path="/">
      <Index />
    </Route>
      <Route path="/Login">
        <Login />
      </Route>
      <Route path="/Register">
        <Register />
      </Route>
      <Route path="/Home">
        <Home />
      </Route>
      <Route path="/Services">
        <Services />
      </Route>
    </Switch>
  </Router>
  );
  }
 export default App;

I also have a home component with the following code :我还有一个带有以下代码的家庭组件:

import React, { Component } from 'react';
import 'bootstrap/dist/css/bootstrap.css';
import '../App.css';
import {BrowserRouter as Router } from 'react-router-dom';
import Navbar from './Navbar.component';
import Chart from './Chart.component';

class Home extends Component {
render() {
    return(
        <Router>
            <Navbar />
            <Chart />
        </Router>
    )
   }
}
export default Home;

Here is my navbar component :这是我的导航栏组件:

import React, { Component } from 'react';
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap/dist/js/bootstrap.js';
import '../App.css';
import {BrowserRouter as Router,Route, Link } from 'react-router-dom';

class Navbar extends Component {
  render() {
      return(

            <nav className="navbar navbar-expand-lg navbar-light blue-nav">
            <Link className="navbar-brand" to="/Home">
                <img alt="nothing" width="110" src="logo.png"></img>
            </Link>
            <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span className="navbar-toggler-icon"></span>
            </button>

            <div className="collapse navbar-collapse" id="navbarSupportedContent">
                <ul className="navbar-nav mr-auto">
                <li className="nav-item">
                    <Link className="nav-link" to="/Home"><i className="fas fa-tachometer-alt"></i> Tableau de bord</Link>
                </li>
                <li className="nav-item">
                    <Link className="nav-link" to="/Services"><i className="fas fa-hand-holding-heart"></i> Nos services</Link>
                </li>
                <li className="nav-item">
                    <Link className="nav-link" to="/Contracts"><i className="fas fa-folder-open"></i> Mes contrats</Link>
                </li>
                <li className="nav-item">
                    <Link className="nav-link" to="/Vehicles"><i className="fas fa-car"></i> Mes vehicules</Link>
                </li>
                <li className="nav-item">
                    <Link className="nav-link" to="/Notifications"><i className="fas fa-bell"></i> Notifications <span className="badge badge-danger">4</span></Link>
                </li>
                <li className="nav-item">
                    <Link className="nav-link" to="/Support"><i className="fas fa-question-circle"></i> Aide</Link>
                </li>

                </ul>
                <ul className="navbar-nav ml-auto">
                <li className="nav-item dropdown">
                    <Link className="nav-link dropdown-toggle" to="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    <i className="fas fa-user-cog"></i> Compte
                    </Link>
                    <div className="dropdown-menu dropdown-menux" aria-labelledby="navbarDropdown">
                    <Link className="dropdown-item" to="#"><i className="fas fa-user-circle"></i> Modifier mon profile</Link>
                    <Link className="dropdown-item" to="#"><i className="fas fa-lock"></i> Sécurité</Link>
                    <Link className="dropdown-item" to="#"><i className="fas fa-cogs"></i> Paramètres</Link>
                    <div className="dropdown-divider"></div>
                    <Link className="dropdown-item" to="#"><i className="fas fa-power-off"></i> Se déconnecter</Link>
                    </div>
                </li>
                </ul>
            </div>
            </nav>

      )
  }
}
export default Navbar;

Now what i want to do is when i click the LINK in the navbar (services Or Home) i want that route's component to be rendered, but the problem i have in the browser link it showes localhost:3000/Services but the content of Home component still shows up like there was never a new page navigation.现在我想要做的是当我单击导航栏中的链接(服务或主页)时,我希望渲染该路由的组件,但是我在浏览器链接中遇到的问题显示 localhost:3000/Services 但主页的内容组件仍然显示,就像从来没有新的页面导航一样。

Here is my services component :这是我的服务组件:

import React, { Component } from 'react';
import 'bootstrap/dist/css/bootstrap.css';
import '../App.css';
import {BrowserRouter as Router } from 'react-router-dom';
import Navbar from './Navbar.component';

class Services extends Component {
  constructor(props){
      super(props);
  }
  render() {
      return(
        <Router>
            <Navbar />
        </Router>
     )
  }
}
export default Services;

Here is some images :这是一些图片:

1st image is for the Home before the click of the Link : 2nd image is for the Services page after the link is clicked : (no services content)第一张图片是点击链接前的主页:第二张图片是点击链接后的服务页面:(没有服务内容)

在此处输入图片说明

点击链接后

You need to move Navbar to main App.js and don't use Router inside Router (ie Home and Services pages)你需要移动Navbar主App.js和不使用Router内部路由器(即主页和服务页)

 function App() { const key = Date.now(); return ( <Router> <Navbar /> <Switch> <Route key={key} exact path="/"> <Index /> </Route> <Route key={key} exact path="/Login"> <Login /> </Route> <Route key={key} exact path="/Register"> <Register /> </Route> <Route key={key} exact path="/Home"> <Home /> </Route> <Route key={key} exact path="/Services"> <Services /> </Route> </Switch> </Router> ); } export default App; class Home extends Component { render() { return(<Chart />) } } export default Home; class Services extends Component { render() { return(<ServciesContent />) } } export default Home;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM