编写一个具有三级嵌套路由的应用,要求三级路由分别使用不同的渲染方式,仿照11.3.2动态路由中的嵌套方式,在TencentBrand组件之后再增加一级嵌套,同时使用render和children渲染方式改写两级路由编写形式
时间: 2024-03-01 22:54:47 浏览: 14
好的,我来给您解答。
首先,我们需要在App.js中引入React Router和TencentBrand组件:
```javascript
import React from "react";
import { BrowserRouter as Router, Route, NavLink } from "react-router-dom";
import TencentBrand from "./TencentBrand";
function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<NavLink exact activeClassName="active" to="/">
Home
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to="/about">
About
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to="/contact">
Contact
</NavLink>
</li>
</ul>
</nav>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</div>
</Router>
);
}
```
接下来,我们在About组件中添加一级嵌套路由,并使用render渲染方式:
```javascript
function About() {
return (
<div>
<h2>About</h2>
<<nav>
<ul>
<li>
<NavLink activeClassName="active" to="/about/company">
Company
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to="/about/team">
Team
</NavLink>
</li>
</ul>
</nav>
<Route
path="/about/:page"
render={({ match }) => <h3>{match.params.page}</h3>}
/>
</div>
);
}
```
在Company和Team组件中分别添加二级嵌套路由,并使用children渲染方式:
```javascript
function Company({ match }) {
return (
<div>
<h3>Company</h3>
<nav>
<ul>
<li>
<NavLink activeClassName="active" to={`${match.url}/history`}>
History
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to={`${match.url}/culture`}>
Culture
</NavLink>
</li>
</ul>
</nav>
<Route path={`${match.path}/:page`} children={<Page />} />
</div>
);
}
function Page({ match }) {
return <h4>{match.params.page}</h4>;
}
function Team({ match }) {
return (
<div>
<h3>Team</h3>
<nav>
<ul>
<li>
<NavLink activeClassName="active" to={`${match.url}/management`}>
Management
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to={`${match.url}/engineering`}>
Engineering
</NavLink>
</li>
</ul>
</nav>
<Route path={`${match.path}/:page`} children={<Page />} />
</div>
);
}
```
最后,我们在Contact组件中添加三级嵌套路由,并使用render渲染方式:
```javascript
function Contact() {
return (
<div>
<h2>Contact</h2>
<nav>
<ul>
<li>
<NavLink activeClassName="active" to="/contact/us">
US
</NavLink>
</li>
<li>
<NavLink activeClassName="active" to="/contact/europe">
Europe
</NavLink>
</li>
</ul>
</nav>
<Route
path="/contact/:location"
render={({ match }) => (
<div>
<h3>{match.params.location}</h3>
<nav>
<ul>
<li>
<NavLink activeClassName="active" to={`${match.url}/sales`}>
Sales
</NavLink>
</li>
<li>
<NavLink
activeClassName="active"
to={`${match.url}/support`}
>
Support
</NavLink>
</li>
</ul>
</nav>
<Route
path={`${match.path}/:department`}
render={({ match }) => <h4>{match.params.department}</h4>}
/>
</div>
)}
/>
</div>
);
}
```
这样,我们就完成了三级嵌套路由的应用,其中三级路由分别使用了不同的渲染方式。希望对您有所帮助!