反应本机启动页面警告
react native splash page warning
我制作的初始页面如下所示:
export default class Splash extends Component {
performTimeConsumingTask = async () => {
return new Promise((resolve) =>
setTimeout(() => {
resolve('result');
}),
);
};
async componentDidMount() {
const data = await this.performTimeConsumingTask();
// const navigation = useNavigation();
if (data !== null) {
this.props.navigation.navigate('BottomMainNavgigation');
}
}
render() {
return (
<View style={styles.viewStyles}>
{/* <Text style={styles.textStyles}>Welcome</Text> */}
<Image
style={styles.tinyLogo}
source={{
uri: URL.logov2,
}}
/>
</View>
);
}
}
然后我在导航中这样使用:
const RootStackScreen = (props) => {
const [t] = useTranslation();
return (
<SplashRootStack.Navigator>
<SplashRootStack.Screen
name="Main"
component={Splash}
options={{headerShown: false, headerBackTitle: t('back')}}
/>
<SplashRootStack.Screen
name="BottomMainNavgigation"
component={BottomMainNavgigation}
options={{headerShown: false, headerBackTitle: t('back')}}
/>
</SplashRootStack.Navigator>
);
};
还有:
<PaperProvider theme={MyTheme}>
<NavigationContainer linking={linking} fallback={<Splash />}>
<RootStackScreen />
</NavigationContainer>
</PaperProvider>
在我的 app.js 中像这样:
const App = () => {
return (
<Provider store={store}>
<PersistGate loading={<Splash />} persistor={persistor}>
<Suspense fallback={<Splash />}>
<Navigation />
</Suspense>
</PersistGate>
</Provider>
);
};
export default App;
当我 运行 应用程序时,它看起来像这样:
有一个警告:
我收到 id= 0、1 和 2 的警告,我也收到此警告:
我有什么不正确的广告,如何删除这些警告,当我在模拟器中加载应用程序时,在我得到我自己的初始页面然后到我的应用程序之前,我会出现几秒钟的白屏。
我怎样才能做得更好?
您在 redux persist 中使用 Splash 组件作为加载器,而在您的 Splash 组件中没有任何可用的导航道具,因为它是父组件而不是导航树的一部分,您需要使用 switch navigator目的,但使用当前结构导航将不起作用,除非您将导航部分移动到导航树中。现在的解决方案是,
- 仅将启动画面用作静态 UI 组件。
- 将导航或 componentDidMount 逻辑移到堆栈导航器中。
添加简单的 Activity 指标作为后备。
<PersistGate
loading={<ActivityIndicator style={{top: '45%'}}
animating color={theme.appColor} size='large' />}
persistor={ReduxStore.persistor}>
<Navigator />
</PersistGate>
您的警告
未定义不是对象:
问题是您正在使用 Splash 作为后备组件,因此在您的深层链接得到解决之前,将显示 Splash,并且此处的 Splash 不是导航的一部分,导航不会获得 'navigation' 道具,因此您会收到警告。
对于 PersistGate 和 suspense 等其他高阶组件也是如此,您可以为所有内容提供启动画面,所有这些都是局外人导航。
解决方案:使用 activity 指标而不是飞溅作为后备
这是由于你的redux中间件之一耗时较长,最好检查你的redux中间件。
白屏,
这是导致白屏的原因,可能与您的中间件警告或组件安装启动画面的原因相同。而且您有多个提供商,所以最好删除一两个并检查是什么原因造成的。
您可以查看此示例以了解如何使用初始屏幕和身份验证。
https://snack.expo.io/@guruparan/rnn-v5
我制作的初始页面如下所示:
export default class Splash extends Component {
performTimeConsumingTask = async () => {
return new Promise((resolve) =>
setTimeout(() => {
resolve('result');
}),
);
};
async componentDidMount() {
const data = await this.performTimeConsumingTask();
// const navigation = useNavigation();
if (data !== null) {
this.props.navigation.navigate('BottomMainNavgigation');
}
}
render() {
return (
<View style={styles.viewStyles}>
{/* <Text style={styles.textStyles}>Welcome</Text> */}
<Image
style={styles.tinyLogo}
source={{
uri: URL.logov2,
}}
/>
</View>
);
}
}
然后我在导航中这样使用:
const RootStackScreen = (props) => {
const [t] = useTranslation();
return (
<SplashRootStack.Navigator>
<SplashRootStack.Screen
name="Main"
component={Splash}
options={{headerShown: false, headerBackTitle: t('back')}}
/>
<SplashRootStack.Screen
name="BottomMainNavgigation"
component={BottomMainNavgigation}
options={{headerShown: false, headerBackTitle: t('back')}}
/>
</SplashRootStack.Navigator>
);
};
还有:
<PaperProvider theme={MyTheme}>
<NavigationContainer linking={linking} fallback={<Splash />}>
<RootStackScreen />
</NavigationContainer>
</PaperProvider>
在我的 app.js 中像这样:
const App = () => {
return (
<Provider store={store}>
<PersistGate loading={<Splash />} persistor={persistor}>
<Suspense fallback={<Splash />}>
<Navigation />
</Suspense>
</PersistGate>
</Provider>
);
};
export default App;
当我 运行 应用程序时,它看起来像这样:
有一个警告:
我收到 id= 0、1 和 2 的警告,我也收到此警告:
我有什么不正确的广告,如何删除这些警告,当我在模拟器中加载应用程序时,在我得到我自己的初始页面然后到我的应用程序之前,我会出现几秒钟的白屏。
我怎样才能做得更好?
您在 redux persist 中使用 Splash 组件作为加载器,而在您的 Splash 组件中没有任何可用的导航道具,因为它是父组件而不是导航树的一部分,您需要使用 switch navigator目的,但使用当前结构导航将不起作用,除非您将导航部分移动到导航树中。现在的解决方案是,
- 仅将启动画面用作静态 UI 组件。
- 将导航或 componentDidMount 逻辑移到堆栈导航器中。
添加简单的 Activity 指标作为后备。
<PersistGate
loading={<ActivityIndicator style={{top: '45%'}}
animating color={theme.appColor} size='large' />}
persistor={ReduxStore.persistor}>
<Navigator />
</PersistGate>
您的警告
未定义不是对象: 问题是您正在使用 Splash 作为后备组件,因此在您的深层链接得到解决之前,将显示 Splash,并且此处的 Splash 不是导航的一部分,导航不会获得 'navigation' 道具,因此您会收到警告。 对于 PersistGate 和 suspense 等其他高阶组件也是如此,您可以为所有内容提供启动画面,所有这些都是局外人导航。 解决方案:使用 activity 指标而不是飞溅作为后备
这是由于你的redux中间件之一耗时较长,最好检查你的redux中间件。
白屏, 这是导致白屏的原因,可能与您的中间件警告或组件安装启动画面的原因相同。而且您有多个提供商,所以最好删除一两个并检查是什么原因造成的。
您可以查看此示例以了解如何使用初始屏幕和身份验证。 https://snack.expo.io/@guruparan/rnn-v5