在React组件生命周期中,我可以执行路由更改吗?

时间:2016-12-08 15:42:31

标签: javascript reactjs react-router

我有一种向导,每一步都有自己的路线。现在,当用户使用直接链接到第二步路径时,我想将他重定向到第一步(使用browserHistory.replace)。

我面临的问题是我真的不知道它应该在组件生命周期中的哪个阶段执行。我尝试了constructorrendercomponentWillMount,但即使我使用路由器,所有这些都不会阻止组件呈现。所以会发生重定向,但前一个路由的组件仍然会呈现并失败(显然没有数据)。

在组件初始化期间是否有任何“正确”的重定向方式(我需要检查状态)?或者还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我不知道"官员"推荐的方式(如果有人能找到它仍然感兴趣),但对我有用的是:

  1. from
  2. 期间的重定向
  3. 渲染期间使用与select (case when a.cnt = b.cnt then 0 else 1 end) as result from (select count(*) as cnt from trans) a cross join (select count(*) as cnt from resa b); 中相同的条件返回null
  4. 示例:

    componentWillMount

答案 1 :(得分:1)

在v2 / 3中,您应该使用onEnter功能重定向(使用replace功能)。 v2 / 3复制了React的大部分生命周期函数,因为它并没有真正使用React来渲染路径组件。也就是说,<Route>仅用于配置,react-router为给定路由生成一组组件并单独呈现每个组件。

function redirectToStart(nextState, replace) {
  if (!nextState.someCondition) {
    replace('/initial-page')
  }
}

<Route onEnter={redirectToStart} ... />