reactjs - React-Router DOM 不渲染其他页面的内容
问题描述
// App.js
import React from 'react';
import Contact from './Contact';
import About from './About';
import Nav from './Nav';
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom';
function Web() {
return (
<Router>
<Switch>
<Nav />
<Route exact path="/" Component={Home} />
<Route exact path="/contact" Component={Contact} />
</Switch>
</Router>
);
}
const Home = () => (
<div>
<h1>Home page</h1>
</div>
);
export default Web;
// Nav.js
import React from 'react';
import {Link} from 'react-router-dom';
class Nav extends React.Component {
render() {
return (
<nav class="navbar navbar-light bg-light justify-content-between">
<Link to="/contact">
<a class="navbar-brand">Contact</a>
</Link>
<Link to="/about">
<a class="navbar-brand">about</a>
</Link>
</nav>
);
}
}
export default Nav;
//Contact.js
import React from 'react';
class Contact extends React.Component {
render() {
return <h1>CONTACT PAGE</h1>;
}
}
export default Contact;
当我不使用 react-router 时,它可以正常工作并呈现联系页面。当谈到反应路由器时,这仅呈现导航栏页面。当我单击导航栏中的联系人链接时,网址会发生变化,但它是一个空页面。我可能犯了一些错误但找不到。
解决方案
所有children
的一个Switch
组件都应该是一个Route
或多个Redirect
组件。
此外,您永远不会将component
道具传递给路由组件,因为您的道具名称(如“组件”)大写。
function Web() {
return (
<Router>
<Nav /> /* Nav should be outside of the switch */
<Switch>
<Route exact path='/' component={Home} /> /* lowercased prop name */
<Route exact path='/contact' component={Contact} />
</Switch>
</Router>
)
}
推荐阅读
- ios - Xcode Continue Build After Errors 即使在禁用时也会返回多个错误
- c++ - Unsigned char * 产生奇怪的字符,使其总是无法比较
- kubernetes - 将流量从 GCP 虚拟机路由到 VPC Native Cloud DNS GKE 集群
- r - 在shinywidget的下拉()下的multiInput()中选择后下拉消失
- typescript - 找不到模块“firebase”或其相应的类型声明。React + TypeScript + Firebase
- angular10 - mmenu-light 在 Angular 10 中引发错误。我该如何解决?
- google-apps-script - 使用 Google Apps 脚本提取当前价格变化百分比(Google 财经)
- python - 如果在另一个 CSV 文件中找到行值,则从 CSV 文件中过滤行
- c# - 我将如何忽略通过 websocket 发送的错误数据。在这种情况下,我试图阻止字符串数据被接受和使用
- ios - Swift 有没有办法检查 NSCrossWebsiteTrackingUsageDescription 状态