javascript - 使用反应路由器时如何在页面上取消渲染元素
问题描述
所以我希望有一个导航栏,可以将用户引导到我投资组合的不同领域。我想要发生的是让导航栏和 img 一旦用户点击他们想要去的 li 就会消失。基本上希望用户登陆一个完全空白的页面,我可以在没有导航栏和 img 的情况下填写。我确定这是一个简单的解决方法,但这是我当前的路由器代码:
import React from 'react'
import myPic from '../img/cropped.png'
import '../css/homePage.css'
import About from '../components/about.js'
import Projects from '../components/projects.js'
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
class HomePage extends React.Component{
render(){
return(
<Router>
<div className = "container">
<img src={myPic}></img>
<navbar>
<ul>
<li><Link to="/about">About</Link></li>
<li><Link to="/projects">Projects</Link></li>
<li><Link to="/resume">Resume</Link></li>
<li><Link to="/contact">Contact</Link></li>
</ul>
</navbar>
<Switch>
<Route exact path='/about' component={About}></Route>
<Route exact path = '/projects' component={Projects} > </Route>
</Switch>
</div>
</Router>
)
}
}
export default HomePage
我知道我没有填写整个 Switch 语句,只是想让其他链接正常工作。
解决方案
将您的导航栏包装成一个单独的组件,例如 .
在导出之前包装您的Navbar
组件。withRouter()
在组件的渲染函数中,您Navbar
现在可以在条件下渲染location
:
render() {
const { location } = this.props;
return (
<ul>
<li><Link to="/about">About</Link></li>
{location.pathname === '/' && <li><Link to="/projects">About</Link></li>}
</ul>
);
}
有关更多详细信息,请参阅:反应路由器:withRouter()