我已经调试了好几个小时了,似乎无法找到解决方案。 出于某种原因,在使用RouteActions在场景之间切换之后,来自前一场景之一的功能会触发并重定向用户。
罪魁祸首似乎是一个登陆页面屏幕,onComponentDidMount从AsyncStorage读取身份验证令牌。一旦说完并完成,用户将被重定向到主屏幕(假设凭证有效)。 authKey存储在本地状态
this.setState({ 'ACCESS_TOKEN':keyValues.access_token});
我这样做的原因是我不必一直从AsyncStorage读取authKeys。无论如何,这一切都很好,用户将被引导通过应用程序。现在应用程序中还有两个屏幕,用户状态再次更新,因为我添加了一些console.log()语句,我可以看到认证屏幕中的MapStateToProps正在再次执行,以及存在的路由操作在身份验证屏幕的render()函数中。
我是否需要从堆栈中删除身份验证屏幕?如何防止状态更新(并调用ComponentDidMount)在当前活动的场景之外的场景上?
答案 0 :(得分:0)
找出问题:我在auth屏幕的render()函数中的条件语句中调用RouteActions(使用react-router-flux)。当我离开时,authscreen停留在场景堆栈上,因此即使场景不可见,也会调用渲染功能。
因此,当另一个屏幕获取auth令牌并更新redux状态(也连接到auth屏幕)时,RouteAction会触发。
所以修复实际上非常简单:我将导致重定向的RouteAction与条件一起检查componentDidMount()函数中是否存在访问令牌。