如何根据初次启动来设置初始屏幕?

问题描述 投票:0回答:2

我正在使用AsyncStorage来检测它是否是第一次启动。

[如果用户是第一次启动该应用程序,则该应用程序会将他们带到“ TourScreen1”页面。或“ Feed”。

但是下面的代码不起作用。

此返回对象。它应该返回字符串。

是否有办法使此代码返回字符串?

还是我需要使用其他方式?

const Initial = createAppContainer(
  createSwitchNavigator(
    {
      Cover,
      TourScreen1,
      TourScreen2,
      TourScreen3,
      TourScreen4,
      Register: RegisterToLogin,
      Feed: TabNavigator
    },
    {
      initialRouteName: AsyncStorage.getItem("isLaunched").then(value => {
        if (value === null) {
          return "TourScreen1";
        } else return "Feed";
      })
    }
  )
);
javascript react-native react-navigation
2个回答
0
投票

因为createSwitchNavigator如suraj所述是同步的,所以您不能提供动态的initialroute名称,我所做的就是将初始屏幕设为初始屏幕,并且该页面仅带有您应用的徽标,并且在该页面中您可以拥有:

    class SplashScreen extends React.Component {
        constructor(){
            super();

        }
        componentDidMount(){
            AsyncStorage.getItem("alreadyLaunched").then(value => {
                if(value == null){
                     AsyncStorage.setItem('alreadyLaunched', true); // No need to wait for `setItem` to finish, although you might want to handle errors
                     this.props.navigation.navigate('FirstTimeScreen');
                }
                else{
                   this.props.navigation.navigate('UsualScreen');
                }}) // Add some error handling, also you can simply do 
        }
        render(){
           return(
<Image /> // image of app
)
    }

希望有帮助。如有疑问,请随时


0
投票

getItem返回一个诺言,它是一个对象,createSwitchNavigator是同步的,不等待getItem的诺言得到履行或拒绝就可以完成执行。因此,promise正在馈送到您的initialRoute,这是导致错误的对象。

进入动态的initialRoute值,没有办法动态设置initialRoutehttps://reactnavigation.org/docs/en/limitations.html#dynamic-routes

至少到[email protected]为止,React Navigation的任何导航器中都没有办法,因此要实现这一点,如果您想坚持使用相同的React Navigation的版本,则可以根据数据动态创建导航器本身将导航库升级到React Navigation 5,可以克服此限制。link的官方文档中引用的上述限制参考React Navigation也包含克服此限制的新API的超链接。

希望这会有所帮助。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.