反应中的嵌套路由不会呈现嵌套组件
nested routes in react does not render nested component
App.tsx
import React, { Component } from "react";
import {
BrowserRouter as Router,
Route,
Switch,
Redirect
} from "react-router-dom";
import Dashboard from "./components/dashboard";
import "./App.css";
class App extends React.Component {
public render() {
return (
<Router>
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Redirect path="/" to="/dashboard/home" />
</Switch>
</Router>
);
}
}
export default App;
Dashboard.tsx
import React from "react";
import { Switch, Route } from "react-router-dom";
import MainDashboard from "./MainDashboard";
class Dashboard extends React.Component {
public render() {
return (
<div>
<div>Dashboard</div>
<Switch>
<Route path="/dashboard/home" Component={MainDashboard} />
</Switch>
</div>
);
}
}
export default Dashboard;
主要Dashboard.tsx
import React from "react";
class MainDashboard extends React.Component {
public render() {
return (
<div>
MainDashboard
</div>
);
}
}
export default MainDashboard;
有嵌套路线。第一个是 App.tsx 中的父路由,然后是 Dashboard.tsx 中的嵌套路由。
预期结果是使用 /dashboard/home 将呈现 MainDashboard 组件。但是没用。
要创建嵌套路由,我们需要使用 match.url
并为我们要呈现的内容添加一些检查,react-router-dom
会将 match
对象注入为 this.props
。
我们使用 exact path={match.url}
作为我们的 "base route" 并添加我们的子路由 path={`${match.url}/:sectionNAme`}
class App extends React.Component {
public render() {
return (
<Router>
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/" render={() => <Redirect to="/dashboard/home" />} />
</Switch>
</Router>
);
}
}
class Dashboard extends React.Component {
public render() {
const { match } = this.props;
return (
<div>
<Route exact path={match.url} render={() => <div>Dashboard</div>} />
<Route path={`${match.url}/home`} component={MainDashboard} />
</div>
);
}
}
class MainDashboard extends React.Component {
public render() {
return (
<div>
MainDashboard
</div>
);
}
}
App.tsx
import React, { Component } from "react";
import {
BrowserRouter as Router,
Route,
Switch,
Redirect
} from "react-router-dom";
import Dashboard from "./components/dashboard";
import "./App.css";
class App extends React.Component {
public render() {
return (
<Router>
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Redirect path="/" to="/dashboard/home" />
</Switch>
</Router>
);
}
}
export default App;
Dashboard.tsx
import React from "react";
import { Switch, Route } from "react-router-dom";
import MainDashboard from "./MainDashboard";
class Dashboard extends React.Component {
public render() {
return (
<div>
<div>Dashboard</div>
<Switch>
<Route path="/dashboard/home" Component={MainDashboard} />
</Switch>
</div>
);
}
}
export default Dashboard;
主要Dashboard.tsx
import React from "react";
class MainDashboard extends React.Component {
public render() {
return (
<div>
MainDashboard
</div>
);
}
}
export default MainDashboard;
有嵌套路线。第一个是 App.tsx 中的父路由,然后是 Dashboard.tsx 中的嵌套路由。 预期结果是使用 /dashboard/home 将呈现 MainDashboard 组件。但是没用。
要创建嵌套路由,我们需要使用 match.url
并为我们要呈现的内容添加一些检查,react-router-dom
会将 match
对象注入为 this.props
。
我们使用 exact path={match.url}
作为我们的 "base route" 并添加我们的子路由 path={`${match.url}/:sectionNAme`}
class App extends React.Component {
public render() {
return (
<Router>
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/" render={() => <Redirect to="/dashboard/home" />} />
</Switch>
</Router>
);
}
}
class Dashboard extends React.Component {
public render() {
const { match } = this.props;
return (
<div>
<Route exact path={match.url} render={() => <div>Dashboard</div>} />
<Route path={`${match.url}/home`} component={MainDashboard} />
</div>
);
}
}
class MainDashboard extends React.Component {
public render() {
return (
<div>
MainDashboard
</div>
);
}
}