React-Router 嵌套路由加载空白页面而不是加载到父组件中

Ang*_*gad 2 reactjs react-router

我是 React 的新手,正在尝试使用嵌套路由创建布局。这是我的场景

  • 当 URL 为 / 时显示登录
  • 当 URL 为 /dashboard 时显示仪表板
  • 当 URL 为 /dashboard/profile 时显示配置文件(这应该在仪表板内容区域内加载)

在浏览器中访问 URL 时,登录页面和仪表板页面会正确加载,但对于 /dashboard/profile,浏览器会转到空白页面,而不是将其加载到仪表板组件中。

索引.js

ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>, 
    document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

应用程序.js

class App extends Component {
  render() {
    return (
      <div>
        {/* <Switch> */}
          <Route exact path='/' component={SignIn}/>
          <Route exact path='/dashboard' component={Dashboard}/>
        {/* </Switch> */}
      </div>
    );
  }
}

export default App;
Run Code Online (Sandbox Code Playgroud)

仪表板.js

class Dashboard extends React.Component {

  render() {
    const { classes } = this.props;

return (
  <React.Fragment>
    <CssBaseline />
    <div className={classes.root}>
      <Header classes={classes} open={this.state.open} click={this.handleDrawerOpen} />
      <Sidebar classes={classes} open={this.state.open} click={this.handleDrawerClose} />
      <main className={classes.content}>
        <div className={classes.appBarSpacer} />           

        *********I expect profile component to load here 
but when I access the URL /dashboard/profile I get a new blank page*********

        Route path="/dashboard/profile" exact component={Profile} />



      </main>
    </div>
  </React.Fragment>
);
  }
}
Run Code Online (Sandbox Code Playgroud)

Mur*_*ati 5

在执行子路由时,您需要exact从仪表板路由(存在于Switch)中移除道具。

这是您的用例的最小实现:

import React, { Component } from "react";
import "./styles.css";

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

const App = () => (
  <Router>
    <div className="App">
      <ul>
        <li>
          <NavLink to="/login">Login</NavLink>
        </li>
        <li>
          <NavLink to="/dashboard">Dashboard</NavLink>
        </li>
      </ul>

      <Switch>
        <Route exact path="/login" component={Login} />
        <Route path="/dashboard" component={Dashboard} />
      </Switch>
    </div>
  </Router>
);

const Login = () => <span>Login Page</span>;

const Dashboard = () => {
  return (
    <div>
      <div>Dashboard Page</div>
      <NavLink to="/dashboard/profile">Go to profile</NavLink>
      <div>
        <Route exact path="/dashboard/profile" component={Profile} />
      </div>
    </div>
  );
};

const Profile = () => {
  return <span>Profile Page</span>;
};

export default App;  
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到工作示例:https : //codesandbox.io/s/z3py3672v3