问题描述
我正在尝试根据“ isAuthenticated”状态redux值有条件地呈现经过身份验证和未经身份验证的屏幕(尝试完全按照此链接中所述进行操作:
我的应用的当前流量为:
- 用户看到未经身份验证的链接(注册页面)
- 一旦用户注册“ isAuthenticated”,redux状态值将从false更改为true,并且使用AsyncStorage在本地保存令牌
- 每次关闭并重新打开应用程序时,都会使用操作读取本地数据,并将isAuthenticated设置为true。
问题:
每次打开应用都会显示第二秒未认证的屏幕,然后显示已认证的屏幕。
所需结果:
根据isAuthenticated布尔值,应显示已认证的屏幕或未认证的屏幕。
确定的问题原因:
由于“ isAuthenticated”默认值设置为false,因此每次应用启动时,一秒钟的isAuthenticated将为false,并且未认证的屏幕将显示几秒钟。
同时,读取本地AsyncStorage数据并将redux状态值更改为true,这将导致另一次重新渲染并显示经过身份验证的屏幕。
由于isAuthenticated在重新打开应用程序时具有假值和真值,因此解决该问题的任何建议将不胜感激。
解决方法
由于“ isAuthenticated”默认值设置为false,因此每次应用启动时,一秒钟的isAuthenticated将为false,并且未认证的屏幕将显示几秒钟。
问题在于,由于实际上有3种状态,因此无法用true
和false
表示。
- 检查
- 已检查,已登录
- 已检查,未登录
最简单的方法是添加另一个状态属性“ checkingAuthentication”或您喜欢的任何内容,并显示初始屏幕,直到完成检查为止。 docs中的示例以isLoading
状态执行此操作。