【发布时间】:2020-01-09 08:32:08
【问题描述】:
目前我有一个带有身份验证实现的反应路由器。它适用于简单的基于组件的路由。 这是我的 PrivateRoute 组件
import { Route } from "react-router-dom";
import React from 'react';
import { Redirect } from 'react-router'
export default function PrivateRoute ({component: Component, authed, ...rest}) {
return (
<Route
{...rest}
render={(props) => authed === true
? <Component {...props} />
: <Redirect to={{pathname: '/', state: {from: props.location}}} />}
/>
)
}
这些类型的路由可以正常工作
<BrowserRouter>
<Switch>
<PrivateRoute authed={this.state.isAuthenticated} path='/register' component={RegisterPage} />
</Switch>
</BrowserRouter>
那些没有组件的路由会出现问题
<Route path="/route1" render={(props) => <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" />} />
这是我提出的使其作为私有路由工作的解决方案,但问题是它缺少 url 重定向
<Route path="/route1" render={(props) => ((this.state.isAuthenticated) ? <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" /> : <NewLandingPage {...props} /> )} />
那么如何使重定向与 iframe 一起工作?
【问题讨论】:
-
什么意思?为什么不渲染
<Redirect to={'whereever'} />而不是<NewLandingPage {...props} />? -
这实际上起到了作用 @SagiRika ,尽管我会尝试将它变成某种 protectediframeroute ,只是为了让它更干净
-
我编辑了我的评论以包含编辑后的 ProtectedRoute,它将匹配这两种情况。
标签: reactjs react-router