使用PersistGate的启动画面

时间:2019-04-26 08:38:23

标签: react-native redux redux-persist

我的代码库如下

Navigator.js     导出默认的createAppContainer(createSwitchNavigator(       {         // screendesign:screendesign,         SplashScreen:SplashScreen,         应用:drNav,         AuthStack:AuthStack       },       {         initialRouteName:'SplashScreen',       }     ));

import SplashScreen from './screens/SplashScreen'
<Provider store={store}>
<PersistGate loading={<SplashScreen/>} persistor={persistor}>
<View style={styles.container}>
<Navigator />
</View>
</PersistGate>
</Provider>

splashScreen.js

componentDidMount() {
    if (this.state.isAuthenticated) {
      this.props.navigation.navigate("App");
    }
    else {
      this.props.navigation.navigate("AuthStack");
    }
  }

我遇到错误了

enter image description here

  

在实施redux之前,我已经将此页面用作输入屏幕   我的应用程序,显示为启动屏幕,并在后面检查用户是否   是否通过身份验证(如果已通过身份验证)重定向到登录页面   其他仪表板。一切正常,但是现在我使用了redux,然后   该方案正在类似地工作,仅差异该屏幕不可见   因为redux persis从存储加载数据

请帮助我是本机新手,无法理解此错误

谢谢

2 个答案:

答案 0 :(得分:1)

导航道具可用于在导航器内部中定义的所有组件。 SplashScreen组件不是导航器的一部分,因此它无权访问导航道具。 但我认为您在那里不需要它。

您的SplashScreen组件是一个转储组件,只要PersistGate需要将存储的数据加载到redux存储中,它就会一直显示给用户。 因此,完成数据加载后,您将看到在PersistGate中定义的其余组件。因此,我不明白为什么您需要使用此加载组件中的导航。

如果确实需要从SplashScreen访问导航道具,则可以遵循以下指南:https://reactnavigation.org/docs/en/connecting-navigation-prop.html

答案 1 :(得分:0)

看起来您的代码无法在 SplashScreen组件中找到导航

1)尝试在SplashScreen组件的render方法中进行控制。 2)还要检查redux的配置,因为您的组件无法访问导航道具,可能会导致redux的配置出现问题。