reactjs - React:隐藏特定路由上的组件
问题描述
新反应:
我有一个<Header />
组件,我只想在用户访问特定页面时隐藏它。
到目前为止,我设计我的应用程序的方式是导航时不会重新渲染<Header />
组件,只有页面内容是,因此它提供了非常流畅的体验。
我尝试为每条路线重新渲染标题,这样可以轻松隐藏,但每次导航时都会遇到丑陋的重新渲染故障。
所以基本上,有没有办法只在进出特定路线时重新渲染组件?
如果没有,实现这一目标的最佳实践是什么?
应用程序.js:
class App extends Component {
render() {
return (
<BrowserRouter>
<div className="App">
<Frame>
<Canvas />
<Header />
<Main />
<NavBar />
</Frame>
</div>
</BrowserRouter>
);
}
}
主.js:
const Main = () => (
<Switch>
<Route exact activeClassName="active" path="/" component={Home} />
<Route exact activeClassName="active" path="/art" component={Art} />
<Route exact activeClassName="active" path="/about" component={About} />
<Route exact activeClassName="active" path="/contact" component={Contact} />
</Switch>
);
解决方案
我也是 React 的新手,但遇到了这个问题。react-router
已接受答案的基于替代方案是使用withRouter
,它包装您要隐藏的组件并为其提供location
道具(以及其他)。
import { withRouter } from 'react-router-dom';
const ComponentToHide = (props) => {
const { location } = props;
if (location.pathname.match(/routeOnWhichToHideIt/)){
return null;
}
return (
<ComponentToHideContent/>
)
}
const ComponentThatHides = withRouter(ComponentToHide);
请注意文档中的这个警告:
withRouter 不像 React Redux 的 connect 那样订阅位置更改来进行状态更改。相反,在位置更改从组件传播出去之后重新渲染。这意味着 withRouter 不会在路由转换时重新渲染,除非其父组件重新渲染。
尽管有这个警告,但这种方法似乎对我来说适用于与 OP 非常相似的用例。
推荐阅读
- typescript - 如何在 Typescript 中创建一个可以使用对象或常规参数构造函数初始化的类?
- javascript - 如何在下拉列表中自动触发警报?
- python - 尝试使用 python 解析来自 html 的数据,但在获取表格行元素后不知道如何进行
- java - 尝试导航到另一个片段时出现异常
- blazor-webassembly - 无法打开 ABP Blaozr 的登录页面
- assembly - 我在 x86 汇编 16 位操作系统中的多个文件中的标签有问题
- twilio - 将 Twilio AMD 与来自本机可编程语音 SDK 的出站呼叫一起使用
- python - Python:将列表组合为 1,但将代码拆分为多行
- python - 标题和 URL 抓取论坛的 Python 错误
- utf-8 - 如何修复名为“不是 UTF-8 编码”的 python 错误?