【问题标题】:React Routing: URL is changing but page is not loadingReact 路由:URL 正在更改,但页面未加载
【发布时间】:2020-03-30 04:29:23
【问题描述】:

在 React(v16.13.1) 中,网址正在更改,但页面未加载

我在堆栈中发现了类似的问题 ReactJS - React Router not changing component but url is changing React Router URL Change but Not Component,我尝试了不同的方式,但没有一个对我有帮助。

这可能是一个小错误,请帮助纠正这个问题。

我的代码如下:

App.js 文件

import React, { Component } from "react";
import { BrowserRouter as Router, Route,Switch,Redirect } from "react-router-dom";
import TopNav from "./components/Navbar/TopNav";
import SideNav from "./components/Navbar/SideNav";
import Dashboard from "./components/Dashboard";
import Analytics from "./components/Analytics";
import ToDo from "./components/ToDo";

class App extends React.Component {
  render() {
    return (
      <div>
        <TopNav />
        <SideNav />
        <Router>
          <Switch>
            <Route exact path="/">
              <Dashboard />
            </Route>
            <Route exact path="/analytics">
              <Analytics />
            </Route>
            {/* <Route exact path="/analytics" component={Analytics}></Route> */}
            <Route exact path="/todo">
              <ToDo />
            </Route>
            <Redirect to="/"></Redirect>
          </Switch>
        </Router>
      </div>
    );
  }
}
export default App;

SideNav.js 页面如下:

import React from "react";
import { BrowserRouter as Router, Link } from "react-router-dom";

class SideNav extends React.Component {
  render() {
    return (
      <div className="sidebar-wrapper">
        <div className="sidebar-container">
          <Router>
            <ul className="sidebar-menu">
              <li className="active">
                <i className="fa fa-cubes"></i>
                <Link className="link" to="/">
                  Dashboard
                </Link>
              </li>
              <li>
                <i className="fa fa-pie-chart"></i>
                <Link className="link" to="/analytics">
                  Analytics
                </Link>
              </li>
              <li>
                <i className="fa fa-medkit"></i>
                <Link className="link" to="/todo">
                  What to do?
                </Link>
              </li>
            </ul>
          </Router>
        </div>
      </div>
    );
  }
}
export default SideNav;

提前致谢!

【问题讨论】:

  • 您能否尝试在ul 标记后添加行&lt;Route path="/analytics" component={Analytics} /&gt;(假设您的分析组件名称为Analytics)并检查它是否适用于分析..
  • 我没有看到任何明显的错误,你的代码。您可以添加一个 sn-p 来重现您的问题吗?
  • @ManirajMurugan,它不工作。谢谢

标签: javascript reactjs react-router


【解决方案1】:

您只需要在应用的顶层有一个&lt;Router&gt;

您已经在 App 组件中使用了 &lt;Router&gt;

SideNav 组件包裹在Router 中,并删除SideNav 中使用的Router

import React, { Component } from "react";
import {
  BrowserRouter as Router,
  Route,
  Switch,
  Redirect,
  Link
} from "react-router-dom";

class SideNav extends Component {
  render() {
    return (
      <div className="sidebar-wrapper">
        <div className="sidebar-container">
          {/* <Router> */}
          <ul className="sidebar-menu">
            <li className="active">
              <i className="fa fa-cubes" />
              <Link className="link" to="/">
                Dashboard
              </Link>
            </li>
            <li>
              <i className="fa fa-pie-chart" />
              <Link className="link" to="/analytics">
                Analytics
              </Link>
            </li>
            <li>
              <i className="fa fa-medkit" />
              <Link className="link" to="/todo">
                What to do?
              </Link>
            </li>
          </ul>
          {/* </Router> */}
        </div>
      </div>
    );
  }
}

class App extends Component {
  render() {
    return (
      <div>
        <Router>
          <SideNav />
          <Switch>
            <Route exact path="/">
              <div>/</div>
            </Route>
            <Route exact path="/analytics">
              <div>ana</div>
            </Route>
            <Route exact path="/todo">
              <div>todo</div>
            </Route>
            <Redirect to="/" />
          </Switch>
        </Router>
      </div>
    );
  }
}
export default App;

【讨论】:

    【解决方案2】:

    您的&lt;SideNav /&gt; 和主要内容在单独的&lt;Router /&gt;s 中。他们看不见对方,也不能一起工作。
    想象一下,就像两个相互独立导航的 iframe,只是没有实际的 iframe。

    需要路由器的所有内容,基本上是整个应用程序,都需要在单个 &lt;Router /&gt; 中。

    import React, { Component } from "react";
    import { BrowserRouter as Router, Route, Switch, Redirect } from "react-router-dom";
    import TopNav from "./components/Navbar/TopNav";
    import SideNav from "./components/Navbar/SideNav";
    import Dashboard from "./components/Dashboard";
    import Analytics from "./components/Analytics";
    import ToDo from "./components/ToDo";
    
    class App extends React.Component {
      render() {
        return (
          <Router>
            <TopNav />
            <SideNav />
            <Switch>
              <Route exact path="/">
                <Dashboard />
              </Route>
              <Route exact path="/analytics">
                <Analytics />
              </Route>
              {/* <Route exact path="/analytics" component={Analytics}></Route> */}
              <Route exact path="/todo">
                <ToDo />
              </Route>
              <Redirect to="/"></Redirect>
            </Switch>
          </Router>
        );
      }
    }
    export default App;
    

    SideNav.js

    import React from "react";
    import { BrowserRouter as Router, Link } from "react-router-dom";
    
    class SideNav extends React.Component {
      render() {
        return (
          <div className="sidebar-wrapper">
            <div className="sidebar-container">
              <ul className="sidebar-menu">
                <li className="active">
                  <i className="fa fa-cubes"></i>
                  <Link className="link" to="/">
                    Dashboard
                  </Link>
                </li>
                <li>
                  <i className="fa fa-pie-chart"></i>
                  <Link className="link" to="/analytics">
                    Analytics
                  </Link>
                </li>
                <li>
                  <i className="fa fa-medkit"></i>
                  <Link className="link" to="/todo">
                    What to do?
                    </Link>
                </li>
              </ul>
            </div>
          </div>
        );
      }
    }
    

    这同样适用于TopNav.js

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2017-12-02
      • 1970-01-01
      • 2021-01-13
      • 2019-11-19
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多