2017-09-19 69 views
0
componentDidMount() { 
    if (sessionStorage.loggedInUser === undefined && localStorage.loggedInUser === undefined) { 
     this.props.history.push("/"); 
    } 
    //Check if user owns the car to see if we should send the ajax 

    ajax.request.get("/cars/all").then((allCars) => { 

     this.setState({ 
      allCars: allCars 
     }) 
    }) 

} 

componentWillMount() { 
    if (sessionStorage.loggedInUser === undefined && localStorage.loggedInUser === undefined) { 
     this.props.history.push("/"); 
    } 
} 

后我有这样的方法,i。由该代码是通过槽他们调试看到,但重定向之后它进入到渲染方法,并开始执行它。为什么?Reactjs,渲染()被执行重定向

+0

你期待它由componentDidMount中移除,因为要重定向但它仍然在后台渲染页面,这是你的意思? – johnjerrico

+0

是的,它仍然执行的渲染方法,并得到了一个未定义例外 – Alexander

+0

据我可以理解“推”不删除旧页,“替换”做 – johnjerrico

回答

1

一旦你开始安装组件的过程中,它的生命周期方法都在排队。在幕后,反应正在运行这些方法来生成“虚拟死亡”。即使结果永远不会到达用户,他们仍然需要执行内部目的的反应。

从事物的外表虽然看起来你想要的是中断做出反应路由器页面过渡,将用户重定向到索引页面的方式。这绝对是可能的,但componentDidMount挂钩并不适合它。

你想要什么onEnter钩上反应路由器的路由组件,你可以用它来防止或重定向安装过程开始之前。

这是(愚蠢)中除去从反应V4路由器,和社区是....不激动它。你的用例就是为什么它是一个必要的钩子的完美例子,为什么我会建议坚持使用react-router的V3,直到这个钩子恢复到当前版本。

+0

aha ok谢谢 – Alexander

1

我没有测试过这一点,但我认为你需要使用这种方法,而不是

this.history.replace("/")