线
<Route path="/:user" component={User}/>
意味着之后的所有内容都/
将传递给this.props.params.user
变量 ofcomponent
并且User
组件将被渲染。
匹配规则只关心path
给定是否与您的path=
模式匹配,它不关心资源是否实际存在。如果我得到以 开头/
的路径并且变量后面有一个文本,则该文本将被解析为路由参数user
,并且User
组件将被渲染,仅此而已。所以是的,this.props.params.user
在这种情况下将具有“约”的值,但是您如何处理变量以及在找不到用户这样的名称的情况下您将显示什么完全取决于您。
我认为他们只是想说,如果您有更多通常会一次全部匹配的模式,您应该使用<Switch>
组件,这样只有第一个匹配项才会实际呈现。
所以例如在使用 <Switch>
时:
A)路径是/about
, 规则
<Route path="/about" component={About}/>
将被匹配并且About
组件将被渲染并且不再进行评估。
B)如果路径是/something
,规则
<Route path="/about" component={About}/>
不会匹配,但规则:
<Route path="/:user" component={User}/>
将被匹配,并且User
组件将被渲染something
为this.props.params.user
参数并且不再进行评估。
C)如果路径是/
规则
<Route path="/about" component={About}/>
<Route path="/:user" component={User}/>
不会匹配但
<Route component={NoMatch}/>
will 和NoMatch
component 将被渲染。
相反,当不使用 <Switch>
时,如果您的路径是/about
:
<Route path="/about" component={About}/>
将被匹配,因为此规则匹配路径等于的所有路由/about
。
<Route path="/:user" component={User}/>
也会被匹配,因为这个规则匹配所有以开头的路由并且/
后面有一个文本。
<Route component={NoMatch}/>
也会被匹配,因为这个规则根本不关心路径,它总是匹配的。