【发布时间】:2017-12-20 17:24:48
【问题描述】:
(react-router-dom 版本:4.1.1)
我已经设置了工作路线,但我有点困惑为什么<Switch> 是必要的:
index.js
import React from 'react';
import { HashRouter, Route, Switch } from 'react-router-dom';
import App from './components/App.jsx';
import FridgePage from './components/FridgePage.jsx';
ReactDOM.render(
<HashRouter>
<Switch>
<Route exact path="/" component={App} />
<Route path="/fridge" component={FridgePage} />
</Switch>
</HashRouter>,
document.getElementById('root')
)
App.jsx
import Header from './Header.jsx';
import {Link} from 'react-router-dom';
export default class App extends React.Component {
render() {
console.log(this.props);
return (
<div>
<h1>Herbnew</h1>
<Link to="fridge">Fridge</Link>
{this.props.children}
</div>
);
}
}
FridgePage.jsx
import React from 'react';
export default class FridgePage extends React.Component {
render() {
return (
<div>
<h1>Fridge</h1>
You finally found the fridge!
</div>
);
}
}
我曾经有一个 div 包裹路线,而不是 Switch。在这种情况下,我看到 App 呈现并尝试单击 Fridge 链接,但没有任何反应(FridgePage 未呈现),并且没有错误输出到控制台。
据我了解,Switch 所做的唯一事情就是专门渲染它匹配的第一个路由,而由于省略它而导致的常见问题是同时渲染两个页面。如果我的"/" 路线是准确的,那么即使没有交换机,冰箱也应该是唯一匹配的路线,对吧?为什么它根本不渲染?
【问题讨论】:
标签: reactjs react-router react-router-v4 react-router-dom