【发布时间】:2019-04-28 15:33:26
【问题描述】:
如果我单击导航链接,我可以看到 slug 已更改,但组件未呈现。我必须手动刷新页面才能看到组件,而页面应该在路由/slug 更改时自行重新渲染。
App.js
import React, { Component } from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import Me from './components/me';
import Contrib from './components/contrib';
import Projects from './components/projects';
import Contact from './components/contact';
class App extends Component {
render() {
return (
<div className="container">
<BrowserRouter>
<Switch>
<Route exact path="/" component={Me} />
<Route path="/contrib" component={Contrib} />
<Route path="/projects" component={Projects} />
<Route path="/contact" component={Contact} />
</Switch>
</BrowserRouter>
</div>
);
}
}
header.jsx
import { BrowserRouter, NavLink} from 'react-router-dom';
const Header = () => {
return (
<div className="container">
<div id="logo">
<img src={Earth} alt="placeholdit" className="rounded" />
</div>
<nav>
<BrowserRouter>
<ul>
<li><NavLink to="/">Home</NavLink></li>
<li><NavLink to="/contrib">Contributions</NavLink></li>
<li><NavLink to="/projects">Projects</NavLink></li>
<li><NavLink to="/contact">Contact</NavLink></li>
<li></li>
</ul>
</BrowserRouter>
</nav>
</div>
)
}
如果我从header.jsx 中删除<BrowserRouter>,我会收到一条错误消息,告诉我:“您不应在<Router> 之外使用<Route> 或withRouter()”。
如果在header.jsx 中添加<BrowserRouter>,则错误消失,但组件不会在路由/slug 更改时呈现。
【问题讨论】:
-
最顶层的组件是如何构成的?你在哪里使用
Header和App? -
啊,我明白了。你能不能渲染你最顶层的组件,例如
document.body并具有最顶层的组件,例如<BrowserRouter><Header /><Main /><Footer /></BrowserRouter>而不是?您的 URL 正在更新但您的组件没有更新的原因是因为您使用了多个BrowserRouter。 -
我怀疑原因是
BrowserRouter,但我不确定。我试试,谢谢提示。 -
是的,现在可以了。谢谢你。我不得不将它包装在
<div>中,因为它抱怨A <Router> may have only one child element。所以这是在App.js-><BrowserRouter> <div> <Header /> <Switch> <Route exact path="/" component={Me} /> <Route path="/contrib" component={Contrib} /> <Route path="/projects" component={Projects} /> <Route path="/contact" component={Contact} /> </Switch> </div> </BrowserRouter>中工作的代码 -
哦,还有一个原因是我避免将所有内容都放在
<div id="root"></div>中,因为来自 Lighthouse 的审核工具抱怨 HTML 中缺少<header>, <main>和<footer>标记。
标签: reactjs react-router-v4 react-router-dom