我对React还是比较陌生,我正在尝试弄清楚如何使React路由器正常工作。我有一个超级简单的测试应用,看起来像这样:
import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter as Router, Route, Switch, IndexRoute, Link} from 'react-router-dom';
const Home = () => <h1><Link to= "/about">Click Me</Link></h1>
const About = () => <h1>About Us</h1>
const Test = () => (
<Router>
<Switch>
<Route path ="/" component = {Home} />
<Route path ="/about" component = {About} />
</Switch>
</Router>
)
ReactDOM.render(<Test />, document.getElementById('app'));
当我运行该应用程序时,home组件将加载而没有任何麻烦,并且当我单击“ Click Me”链接时,URL更改为localhost / about,但是什么也没有发生。如果单击刷新,则会显示“无法获取/关于”。显然我在做错事,但我一直无法弄清楚是什么。我也在使用Webpack。
您需要为/
使用精确的路径,否则它也将与/about
匹配。
<Route exact path="/" component={Home} />
如评论中所述,对于这种简单的事情,我建议使用Create React App,以确保您的服务器代码和Webpack设置均正确。一旦使用create-react-app
,您只需要使用npm
安装react router v4软件包,然后将上面的代码放入App.js
文件中即可。为了使代码与create-react-app
一起使用,需要对代码进行一些小的更改,如下所示:
// App.js
import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
const Home = () => <h1><Link to="/about">Click Me</Link></h1>
const About = () => <h1>About Us</h1>
const App = () => (
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
</Switch>
</Router>
)
export default App;
quick start instructions from React Router V4 documentation会告诉您几乎与我刚才解释的相同。
如果从本地主机运行,则需要将historyApiFallback:true添加到您的webpack.config文件中
也许它可以帮助某人。我忘记使用正确的历史记录,而不是使用Router
,而是使用BrowserRouter
来忽略属性history={...}
以使用其自己的历史记录。我试图使用手动创建的历史记录来重定向页面,但是BrowserRouter
使用了自己的历史记录。
如果添加exact
不能解决问题,我已将其替换为
<Route exect path="/" component={App} />
<Route path="/login" component={Login} />
<Route path="/register" component={Register} />
这一个
<Route exact path="/"> <App /> </Route>
<Route path="/login"> <Login /> </Route>
<Route path="/register"> <Register /> </Route>
将子元素作为路由子元素解决了我的页面路由问题,希望它也对其他人有所帮助