设置redux状态后,呈现已认证和未认证的条件堆栈导航器

问题描述

我正在尝试根据“ isAuthenticated”状态redux值有条件地呈现经过身份验证和未经身份验证的屏幕(尝试完全按照此链接中所述进行操作:

https://reactnavigation.org/docs/auth-flow/?fbclid=IwAR3Wj664kuFR32LJ4CjCkofyv3L1cjDRIc-JFbNICddY6JLqgX-wdGiG8Ls

我的应用的当前流量为:

  1. 用户看到未经身份验证的链接注册页面
  2. 一旦用户注册“ isAuthenticated”,redux状态值将从false更改为true,并且使用AsyncStorage在本地保存令牌
  3. 每次关闭并重新打开应用程序时,都会使用操作读取本地数据,并将isAuthenticated设置为true。

问题:

每次打开应用都会显示第二秒未认证的屏幕,然后显示已认证的屏幕。

所需结果:

根据isAuthenticated布尔值,应显示已认证的屏幕或未认证的屏幕。

确定的问题原因:

由于“ isAuthenticated”认值设置为false,因此每次应用启动时,一秒钟的isAuthenticated将为false,并且未认证的屏幕将显示几秒钟。

同时,读取本地AsyncStorage数据并将redux状态值更改为true,这将导致另一次重新渲染并显示经过身份验证的屏幕。

由于isAuthenticated在重新打开应用程序时具有假值和真值,因此解决该问题的任何建议将不胜感激。

解决方法

由于“ isAuthenticated”默认值设置为false,因此每次应用启动时,一秒钟的isAuthenticated将为false,并且未认证的屏幕将显示几秒钟。

问题在于,由于实际上有3种状态,因此无法用truefalse表示。

  1. 检查
  2. 已检查,已登录
  3. 已检查,未登录

最简单的方法是添加另一个状态属性“ checkingAuthentication”或您喜欢的任何内容,并显示初始屏幕,直到完成检查为止。 docs中的示例以isLoading状态执行此操作。