【发布时间】:2017-06-28 01:46:28
【问题描述】:
我所有的主要反应组件都有这样的部分:
export default class ExampleMain extends Component {
constructor(props) {
super(props)
this.state = {
isAuthenticated: Meteor.userId() !== null
}
}
componentWillMount() {
if (!this.state.isAuthenticated) browserHistory.push('/login')
}
componentDidUpdate() {
if (!this.state.isAuthenticated) browserHistory.push('/login')
}
}
我正在检查用户是否登录。如果这是错误的,用户将被重定向到登录路径。 由于这部分用于许多组件,我在想是否可以优化它以获得 DRY 代码...
更新
我正在使用反应路由器:
render((
<Router history={ browserHistory }>
<Route path='/' component={ App }>
<IndexRoute component={ Main } />
<Route path='login' component={ Login } />
<Route path='content/:id' component={ Content } />
</Route>
<Redirect from='*' to='/' />
</Router>
), document.getElementById('root'))
【问题讨论】:
-
你在使用 Redux/React-Router 吗?
-
我正在使用 react 路由器
-
您可以在组件的构造函数中检查一次,该组件位于
Route中,它是所有这些组件的父级。 -
我已经更新了问题以向您展示我的路由示例...所以您的意思是检查
App组件,对吗? -
是的。您也可以使用
onEnter挂钩,甚至在渲染 App 组件之前进行该逻辑和重定向。但是由于login路由是嵌套的,除非您更改路由顺序,否则钩子不会对您有太大帮助。 (因为无论如何都必须渲染 App,所以您可能希望登录在外面)
标签: javascript reactjs