javascript - 导航栏导致其他组件无法在 React Router 中加载
问题描述
我正在设置一个基本的导航栏,它只有一些按钮,没有任何复杂的日志或任何东西。当我在开关内有这个导航栏时,没有其他组件加载,这意味着我不能在某些组件之间包装导航栏,当我在开关外有导航栏时,它可以工作,我可以检查 props.match.location etc 是“/”而不是在主页上加载它,所以我找到了一个解决方法,但是可能导致这个错误,或者它是预期的行为,我怀疑我的 wildroutes,但不是 100% 确定是什么。我在哪里使用导航栏
const App = () => {
return (
<div>
<Router>
<Switch>
<Route component={theNavbar} />
<Route exact path="/" component={Home} />
<Route exact path="/api/:city/electronics" component={Electronics} />
<Route exact path="/api/:city/labour" component={Labour} />
<Route exact path="/api/posts/item/:id" component={ItemDetails} />
<Route exact path="/create/:city/:category" component={CreatePost} />
</Switch>
</Router>
</div>
);
};
解决方案
这是完全预期的行为,由几个因素引起。第一个是Switch
,第二个是匹配Route
导航的任何内容。
渲染第一个孩子
<Route>
或<Redirect>
与该位置匹配的孩子。
所有后续匹配都不会渲染。
没有路径的路由总是匹配的。
<Route component={theNavbar} />
此路线匹配所有位置,因此将始终匹配。Switch
在一个意味着它总是会呈现的第一个被列出。
始终呈现某些导航组件同时仍匹配其他路由的解决方案是将该组件移到.Switch
Router
推荐阅读
- google-cloud-platform - 使用 GCP API Gateway 前端具有私有入口的 Cloud Run 后端
- scala - 从 scala while 循环返回非单位值
- discord - 使用 discord.js 使用 awaitMessage 获取两个不同的元素
- c++ - 为什么在我的代码中通过函数打印指针时直接给出不同的结果?
- angular - 使用 BrightCove Player Loader 的角度问题
- reactjs - 有没有办法为 expo-av 视频制作自定义控件组件?
- google-apps-script - 你能解释一下为什么我会收到这个错误:Unexpected error while getting the method or property getContacts on object ContactsApp
- java - 我可以在 jboss EAP 7.3 容器中直接包含相关的 jar 文件吗?
- bash - 如何通过中间计算机进行 scp
- javascript - 文本输入未触发更改事件