javascript - React Router 更改 URL,但 BrowserRouter 不更改查看的组件
问题描述
我正在从事的项目有点敏感,但这是我可以向大家展示的。
当我单击 NavBar 中的其中一个时,它会更改 URL,但不会将视图更改为正确的组件。有谁知道为什么?如果有更好的方法可以表达这一点或提高我的 questin 的质量,请告诉我。
我返回的渲染
<NavBar />
<BrowserRouter>
<div>
<Switch>
<Route path="/propertytypes" component={PropertyTypes} />
<Route path="/entitytypes" component={EntityTypes} />
<Route path="/associationtypes" component={AssociationTypes} />
<Route path={Routes.ROOT} component={Test} />
</Switch>
</div>
</BrowserRouter>
我的导航栏
import React, { Component } from "react";
import { Link } from "react-router-dom";
class NavBar extends Component {
render() {
return (
<div>
<ul>
<li>
<Link to="/propertytypes">Props!</Link>
</li>
<li>
<Link to="/entitytypes">Ent!</Link>
</li>
<li>
<Link to="/associationtypes">Ass!</Link>
</li>
</ul>
</div>
);
}
}
export default NavBar;
解决方案
除了@Ukasyah 注意到您正在使用的路由器(您说您正在使用BrowserRouter
)和带有您正在使用的 URL 的屏幕截图(指出您正在使用)之间的差异之外HashRouter
,您的代码肯定有问题出现是因为<Link>
要工作的组件必须包含在BrowserRouter
. 在您的浏览器控制台中,它必须发生此错误:
警告:上下文类型失败:上下文
router
在 中标记为必需Link
,但其值为undefined
。
所以为了避免问题和链接开始工作,你的渲染应该是这样的:
<BrowserRouter>
<div>
<NavBar />
<Switch>
<Route path="/propertytypes" component={PropertyTypes} />
<Route path="/entitytypes" component={EntityTypes} />
<Route path="/associationtypes" component={AssociationTypes} />
<Route path={Routes.ROOT} component={Test} />
</Switch>
</div>
</BrowserRouter>
请注意,我将NavBar
组件放在里面,div
因为BrowserRouter
只允许有一个孩子。
推荐阅读
- ionic-framework - 不能将 Ionic DevApp 与 React 一起使用
- java - Android Studio Proguard 无法运行
- html - 在移动 chrome 浏览器的页面右侧显示不需要的空间,但在移动 Firefox 浏览器中很好
- spring-boot - Hazelcast:运行集群时避免警告
- objective-c - 无法在 Objective-C 中打开新的 Microsoft Word 文档
- javascript - 如何在一台设备上加密文本并在另一台设备上解密?
- javascript - 如何使用jquery设置多个css
- ios - 如何使用 AudioKit 的新 AKSequencer 播放 MIDI
- c++ - Clang 不会编译匿名结构
- reactjs - import React SyntaxError: Unexpected identifier - 从另一个模块导入 React 组件时