我正在尝试通过运行React Router获得一个示例。虽然只有一个级别http://www.example.com/one
,但路由器可以工作,但是一旦我进入另一个级别http://www.example.com/one/two
,路由器就无法工作。
在示例中,存在以下3条路线:
主应用类:
import * as React from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { One } from './One';
import { Two } from './Two';
import { Three } from './Three';
export class App2 extends React.Component<{}, {}> {
public render() {
return <BrowserRouter>
<Switch>
<Route path='/one' component={One} />
<Route path='/one/two' component={Two} />
<Route path='/one/two/three' component={Three} />
</Switch>
</BrowserRouter>;
}
}
类命名为一:
import * as React from 'react';
export class One extends React.Component<{}, {}> {
public render() {
return <div>One</div>;
}
}
类名为二:
import * as React from 'react';
export class Two extends React.Component<{}, {}> {
public render() {
return <div>Two</div>;
}
}
类名为三:
import * as React from 'react';
export class Three extends React.Component<{}, {}> {
public render() {
return <div>Three</div>;
}
}
我使用以下版本:
我尝试遵循示例here。
为什么只有1.路线有效?为什么其他路线2.和3.不起作用?
编辑1:
尝试使用精确也不行。结果与上面提到的相同:
import * as React from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { One } from './One';
import { Two } from './Two';
import { Three } from './Three';
export class App2 extends React.Component<{}, {}> {
public render() {
return <BrowserRouter>
<Switch>
<Route exact path='/one' component={One} />
<Route exact path='/one/two' component={Two} />
<Route exact path='/one/two/three' component={Three} />
</Switch>
</BrowserRouter>;
}
}
编辑2:
尝试更改顺序也不起作用。结果与上面提到的相同:
import * as React from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { One } from './One';
import { Two } from './Two';
import { Three } from './Three';
export class App2 extends React.Component<{}, {}> {
public render() {
return <BrowserRouter>
<Switch>
<Route path='/one/two/three' component={Three} />
<Route path='/one/two' component={Two} />
<Route path='/one' component={One} />
</Switch>
</BrowserRouter>;
}
}
与大多数路由器一样,每个路由器都按顺序检查是否匹配。
<Route/>
中使用精确
由于您的路径始终以/one
开头,因此react router仅匹配该部分,如果您想更深入,则必须告诉他exact(ly)您想要什么。<Route exact path='/one' component={One} />
<Route exact path='/one/two' component={Two} />
<Route exact path='/one/two/three' component={Three} />
这里是docs的链接