reactjs - React App 只为 App.js 中的某些路由包装高阶组件
问题描述
我希望能够只用更高阶的组件包装我的一些路线,这是我的Layout.js
,包含一个侧抽屉和一个导航栏。但是我希望 404 页面没有这个更高阶的布局组件包装器,就像这样。
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import Layout from './hoc/Layout/Layout';
import Shopping from './containers/Shopping';
import Checkout from './containers/Checkout/Checkout';
import PageNotFound from './components/UI/PageNotFound/PageNotFound';
function App() {
return (
<Switch>
<Layout>
<Route exact path="/" component={Shopping} />
<Route exact path="/checkout" component={Checkout} />
</Layout>
<Route component={PageNotFound} />
</Switch>
);
}
export default App;
发生的情况是路由器永远不会到达<Route component={PageNotFound} />
路由。它显示一个带有Layout
包装的空白页。
只有当我移动包装器<Route component={PageNotFound} />
内部时<Layout><Layout />
才会显示页面,但它也会显示我的布局组件。我该怎么做才能将<PageNotFound />
组件保留在布局之外?为什么不能Router
在 Layout HOC 之外访问它?它应该,因为它是一个更高的顺序。它把它全部包装成index.js
这样:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<Router>
<App />
</Router>
</React.StrictMode>,
document.getElementById('root'),
);
解决方案
推荐阅读
- python - Dask延迟总和被杀死但有足够的资源
- arrays - 如何使用 React.js 中的 i18next 翻译与 .map 映射 .json 文件?
- python - 卡在机器上进行渗透测试学习,可能是 sudo 漏洞?
- algorithm - FIFO 何时胜过 LRU 替换算法?
- c++ - 关于 C++ 名称查找的困惑
- c# - Pascal 代码到 C# 代码的转换(ord 和 chr)
- node.js - Socket.io v3 不支持的协议版本错误
- php - 此集合实例上不存在属性 [id] - Laravel 6
- postgresql - API 结果与 SQL 查询不同的响应
- kotlin - 是否有更惯用的方式来执行订阅和异步/等待操作?