【问题标题】:React Router not rendering anything反应路由器不渲染任何东西
【发布时间】:2021-12-28 20:15:53
【问题描述】:

使用 react-router-dom 时,我无法渲染任何组件或任何东西。 它所做的只是显示一个白屏,它不会向我的 index.html 模板添加任何内容。 没有任何错误,但它说在 index.js 中有未使用的变量是我的组件。

这是我的代码:

index.js

// Imports
import React from 'react';
import ReactDOM from 'react-dom';
import './css/index.css';
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';

import { navbar, footer, home } from './components';

ReactDOM.render(
    <Router>
      <navBar />
      <Routes>
        <Route path="/" element={<home />} />
      </Routes>
      <footer />
    </Router>,
    document.getElementById("root")
);

home.jsx

import React from "react";

function home(){
    return(
        <div className="home">
            <div class="container">
                <div class="row allign-items-center my-5">
                    <div class="col-lg-7">
                        <img class="img-fluid rounded mb-4 mb-lg-0" src="./img/pizza.jpg" alt=""/>
                    </div>
                    <div class="col-lg-5">
                        <h1 class="font-weight-light">cencored</h1>
                        <p>cencored</p>
                    </div>
                </div>
            </div>
        </div>
    )
}

export default home;

navBar.jsx

import React from 'react';
import {NavLink} from 'react-router-dom';

function navBar(){
        return(
            <div className="navBar">
                <nav className="navbar navbar-expand navbar-dar bg-dark">
                    <div className="container">
                        <NavLink className="navbar-brand" to="/"><img src="../img/logo.png" alt="logo" style="width:500px;height:500px;"/></NavLink>
                        <div>
                            <ul className="navbar-nav ml-auto">
                                <li className="nav-item">
                                    <NavLink className="nav-link" to="/menu">Menu</NavLink></li>
                                <li className="nav-item">
                                    <NavLink className="nav-link" to="/about">About</NavLink></li>
                                <li className="nav-item">
                                    <NavLink className="nav-link" to="/contact">Contact</NavLink></li>
                            </ul>
                        </div>
                    </div>
                </nav>
            </div>
    );
}


export default navBar;

footer.jsx

import React from 'react';
import {NavLink} from 'react-router-dom';

function footer(){
    return(
        <div className="footer">
            <footer class="py-5 bg-dark fixed-bottom">
                <div class="container">
                    <p class="m-0 text-center text-white">cencored</p>
                </div>
                 <div>
                    <ul className="navbar-nav ml-auto">
                        <li className="nav-item">
                            <NavLink className="nav-link" to="/">Home</NavLink></li>
                        <li className="nav-item">
                            <NavLink className="nav-link" to="/menu">Menu</NavLink></li>
                        <li className="nav-item">
                            <NavLink className="nav-link" to="/about">About</NavLink></li>
                        <li className="nav-item">
                            <NavLink className="nav-link" to="/contact">Contact</NavLink></li>
                    </ul>
                </div>
            </footer>
        </div>
    );
}


export default footer;

index.js(组件导出)

export { default as navbar } from './navBar';
export { default as footer } from './footer';
export { default as home } from './home';

【问题讨论】:

  • 它没有向我的 index.html 模板添加任何内容。”是什么意思?
  • 在没有路由器的情况下渲染这些组件是否有效?
  • 自定义组件的名称不应该以大写字母开头吗?
  • @Bergi 如果我进入检查元素,则 html 与 index.html 模板相同,根 div 中不会添加任何内容。不,没有路由器就不行,我把它们都改成大写字母还是不行。
  • 如果没有路由也无法工作,则 react-router 不是罪魁祸首,您应该重新提出您的问题。您的index.js 模块是否已加载并执行?您是否在 devtools 控制台中遇到任何错误?你用什么工具链,jsx语法转译正确吗?

标签: javascript reactjs react-router react-router-dom


【解决方案1】:

不要在 Route 上使用 element 道具,而是尝试像组件道具一样

&lt;Route path="/" component={Home}&gt;

您还必须大写组件。

【讨论】:

  • 还是什么都没有。 :(
  • @TahBaconPerson 我从未使用过&lt;Routes&gt; 组件。如果你想做独家渲染,试试&lt;Switch&gt; 组件
  • OP 使用的是react-router-dom v6,因此没有用于渲染路由组件的component 属性,并且Routes 替换了Switch 组件。这个答案不正确。
【解决方案2】:

React 组件应该使用 PascalCase 名称。

export { default as Navbar } from './navBar';
export { default as Footer } from './footer';
export { default as Home } from './home';

...

import { Navbar, Footer, Home } from './components';

ReactDOM.render(
    <Router>
      <NavBar />
      <Routes>
        <Route path="/" element={<Home />} />
      </Routes>
      <Footer />
    </Router>,
    document.getElementById("root")
);

【讨论】:

    【解决方案3】:

    您缺少从“react-router-dom”导入 Switch 并且必须将路由包装到 .在 Routes 中,您必须添加所有带有路径的组件,而不仅仅是 Home 组件。

    伪代码:

        import { Switch, Route, Router } from "react-router-dom";
        import Home from '.....path'
        //import all routing componets
        
        const Routes = () => {
         return(
        <Switch>
         <Route exact path='/' component={Home}>
         <Route exact path='/comp1' component={Comp1}>
         <Route exact path='/comp2' component={Comp2}>
       </Switch>)}
    
      
    
       const App = () => {
        <Router>
          <GlobalNav />
          <Container fluid={true}>
            <SideNav />
            <Routes />
          </Container>
        </Router>}
    

    然后你可以在任何地方添加你的导航栏,但必须被包裹到路由器中。我刚刚添加了一个例子,我可以在某处有错字,但如果你遵循这个概念,它应该可以工作。并将您的组件更改为 Pascal 命名。

    【讨论】:

      【解决方案4】:

      如果你默认导出,你会像这样导入:

      import Home from './components/Home'
      

      您不能有多个默认导出。

      我建议你像这样导出:

      export function Home() {
      

      那么你不需要在文件末尾写导出,你将无法更改导出名称,我认为这是一件好事。

      然后你可以像这样导入:

      import {Home} from './components/Home'
      import {Footer} from './components/Footer'
      import {Navbar} from './components/Navbar'
      

      【讨论】:

      • 没用。这就是我以前的做法,但没有“导出功能”,但那不起作用,所以我尝试了另一种方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多