我尝试使用v4 react路由器,但路由器总是呈现初始路径(' /')。 我正在使用
react: ^16.2.0
react-dom: ^16.2.0
react-router-dom: ^4.2.2
当我尝试渲染/#/ account时,它会呈现Home而不是Account。
import React from "react"
import ReactDOM from "react-dom"
import { BrowserRouter as Router, Route } from 'react-router-dom'
import Home from "./components/Home/Home";
import Account from "./components/Account/Account";
import Layout from "./components/Layout";
const app = document.getElementById('app');
ReactDOM.render(
<Router>
<div>
<Route exact path="/" render={() => (<div>Home</div>)} />
<Route path="/account" render={() => (<div>Account</div>)} />
</div>
</Router>,
app
)
&#13;
答案 0 :(得分:1)
解决此问题的方法之一是使用来自react-router-dom的<Switch>
,您可以将其导入为:
import {Switch} from 'react-router-dom';
然后将<Route>
包裹在<Switch>
内我认为最好将"/"
放在最后并给出默认组件,如:
<Router>
<div>
<Switch>
<Route path="/account" render={() => (<div>Account</div>)} />
<Route exact path="/" render={() => (<div>Home</div>)} />
<Route component={NoMatch}/>
</Switch>
</div>
</Router>
您可以阅读有关<Switch>
Here
答案 1 :(得分:1)
这是预期的行为,因为“ / home”将同时匹配“ /”和“ home”,因此可以看到这两个组件,可以通过在“ /” Route属性中添加“ exact”参数来解决,如下所示:< / p>
<Route path="/" exact component={Home}/>
<Route path="/about" component={About}/>
<Route path="/contact" component={Contact}/>
答案 2 :(得分:0)
使用<BrowserRouter>
的另一种方法是<HashRouter>
,它使用URL的哈希部分(即window.location.hash)来保持UI与URL同步。
因此,在您的示例中,您只需导入HashRouter
即可
import { HashRouter as Router, Route } from 'react-router-dom'
答案 3 :(得分:0)
我知道它晚了一点,但是面临着相同的问题,并且想到了与所有人共享。
通过在“路线”上添加“精确”参数来解决
<Route path="/contact-us" exact component={component-name} />
答案 4 :(得分:0)
我参加聚会有点晚了,但是我遇到了这个问题,我敢肯定我不会成为最后一个。
在我的情况下,一页上有一个组件,而另一页上有链接。
例如,它可能是帐户页面上的<Button onClick={goToHomePage()} />Go Home</Button>
组件。呈现帐户页面后,将立即调用goToHomePage()
,将用户重新路由到主页。它会很快发生,并且会造成一些混乱。正确的路由器设置也会发生这种情况。
我希望这对以后的人有所帮助!