在React组件中进行重定向的合适生命周期阶段是什么?
What is the appropriate lifecycle stage to do redirects in a React component?
我想基于一个外部条件渲染一个组件,否则重定向到应用程序的其他地方。
理想情况下,此重定向将在组件之前决定,但在某些情况下,我觉得我需要在组件中执行此操作。例如,在ReactRouter中,路由器可能是这样的:
<Router>
<Route path='/' component={LoadingPage} />
<Route path='/Home' component={HomePage} />
<Route path='/Login' component={LoginPage} />
</Router>
和LoadingPage的逻辑/sudocode将像这样:
if (stillLoading) {
render
} else if (loggedIn) {
redirectToHome
} else {
redirectToLogin
}
这很复杂,因为有时在请求组件之前应用已经加载了。
哪个生命周期阶段是放置重定向逻辑最合适的地方?
- 渲染/一个方法从渲染调用?(看起来很奇怪)
- ComponentDidMount +为以后做一个事件监听器?
- GetInitialState吗?(但不应该有副作用?)
- ComponentWillMount吗?
- ?
我有一个类似的应用程序,我应用了flux模式。我创建了一个loginStore
来保存登录状态,其他页面会监视它。我使用高阶组件来观察存储变化,因此加载状态通过props
传递给其他组件。然后我在UNSAFE_componentWillReceiveProps()
中做页面过渡。
如果你不应用通量模式,我认为你必须首先决定如何知道外部条件。例如,如果外部条件来自props
,则将逻辑放在UNSAFE_componentWillReceiveProps()
中。
不要把重定向逻辑放在渲染中,它应该是pure
。每次当您调用render
方法时,它只返回DOM
的描述,而不是转换页面。
ComponentWillMount
也不工作。它只被调用一次,并且可能在您登录之前被调用。GetInitialState
也有这个问题,它应该只提供组件的初始状态。
我在componentDidMount
中做重定向,并且没有问题,因为我只在初始页面加载期间需要重定向。我支持其他人的想法,认为render
应该保持纯粹,并始终返回有效的DOM。如果我知道我需要重定向,我只需从render
执行return null;
。
相关文章:
- 组件生命周期问题/无法处理未定义的问题
- 渲染方法与生命周期方法中的React计算
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 管理动态磁贴和应用程序生命周期
- 主干网的生命周期.js创建过程中的视图
- 使用Ember中的组件生命周期事件
- 关于Angular 1.5零部件生命周期挂钩
- 更新数据时的React.js生命周期
- 雷杜克斯.从容器组件描述表示组件的生命周期方法
- 增加服务工作线程的生命周期
- 是否有一种自动方法来确定(或查找)库的生命周期结束/支持终止通知
- 如何将请求生命周期事件封装在 happy.js 中
- 使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用
- 聚合物元素注册和生命周期(创建和准备调用两次)
- E_UNKNOWN beforeCreate 和其他生命周期回调的响应错误
- Aurelia 组件生命周期中的远程服务
- 节点.js简单的 Web 服务器请求生命周期
- 角度引导程序生命周期:在完全加载后运行代码
- 主干提取集合生命周期,从响应设置属性
- JQuery 插件架构,用于定义对象和变量生命周期