我还在学习路由器v4的反应。我想知道这样做有什么区别
使用
获取位置const {
match,
location,
layoutBoxed,
navCollapsed,
navBehind,
fixedHeader,
sidebarWidth,
theme,
} = this.props;
选项1
if(location.pathname === '/500'){
return <Page500 />
这个 选项2
<Route path={'/500'} component={Page500} />
至于我,虽然第一个选项显示适合我的一切, 第二个,即路由器一,仅在页面的一半显示该组件。 现在,为什么会这样? 选项1结果 - &gt; 选项2结果 - &gt; 但主要观点 - &gt;使用location.path名称和路由器
之间的区别是什么答案 0 :(得分:0)
反应路由器的一个主要功能是你可以做以下事情:
<Route path="/user/:id" component={User} />
和id
将传递到User
组件。
实施例。 /user/bob
和/user/jill
都会呈现User
组件,但在componentDidMount
中,您现在可以从API中获取正确的用户信息。
使用location.pathname
,任务变得更加复杂,如@palsrealm所述。但首先,location
道具必须可用于此方法。
还有其他功能你会失败,但这是我能想到的主要功能。您可以查看Route
api documentation here。
编辑:至于为什么渲染方式不同,我真的无法在没有更多背景的情况下回答。例如,Route
是否包含在Switch
组件中,如下所示:
<Switch>
// Other routes
<Route exact path="/500" component={Page500} />
</Switch>
答案 1 :(得分:0)
在选项2 <Route path={'/500'} component={Page500} />
在这里,您将创建一个路径为/ 500并加载组件Page500
的路径。这意味着当用户导航到Route中指定的路径时,React-Router将呈现定义Route的组件。
在选项1 中,
if(location.pathname === '/500'){
return <Page500 />
}
父组件根据收到的Page500
道具决定何时呈现location
组件。这个location
道具最终将来自一条路线或withRouter
HOC。这相当于
<Route render={(props)=>{
if(props.location.pathname === '/500'){
return <Page500 />;
}else{
return null;
}
}
}
/>
也可以写成
<Route path={'/500'} component={Page500} />
总而言之,如果从父组件获得位置道具,则只能执行选项1,您可以在应用程序的任何位置定义路径(选项2)。
编辑: 如果你有所有的路线,如
return( <div>
<Route path={'/500'} component={Page500} />
<Route path={'/confirm-email'} component={PageConfirmEmail} />
<Route path={'/lock-screen'} component={PageLockScreen} />
<Route path={'/login'} component={PageLogin} />
<Route path={'/sign-up'} component={PageSignUp} />
<Route path={'/forgot-password'} component={PageForgotPassword} />
<Route path={'/fullscreen'} component={PageFullscreen} />
</div> );
您正冒着多个路由渲染的风险,这可能是您在选项2中获得半页渲染的原因。为了防止这种情况发生并仅渲染匹配的第一个路由,您应该添加Switch
< / p>
return( <div>
<Switch>
<Route path={'/500'} component={Page500} />
<Route path={'/confirm-email'} component={PageConfirmEmail} />
<Route path={'/lock-screen'} component={PageLockScreen} />
<Route path={'/login'} component={PageLogin} />
<Route path={'/sign-up'} component={PageSignUp} />
<Route path={'/forgot-password'} component={PageForgotPassword} />
<Route path={'/fullscreen'} component={PageFullscreen} />
</Switch>
</div> );
Switch
的更多内容可在https://reacttraining.com/react-router/web/api/Switch