首页指南参考教程

Expo SplashScreen iconExpo SplashScreen

一个库,提供对控制原生启动屏幕的可见性行为的访问。

Android
iOS
tvOS

expo-splash-screen 库中的 SplashScreen 模块用于告诉启动屏幕保持可见,直到被明确告知隐藏为止。这对于执行在幕后发生的任务非常有用,例如进行 API 调用、预加载字体、动画启动屏幕等。

¥The SplashScreen module from the expo-splash-screen library is used to tell the splash screen to remain visible until it has been explicitly told to hide. This is useful to do tasks that will happen behind the scenes such as making API calls, pre-loading fonts, animating the splash screen and so on.

另请参阅有关 创建闪屏图片使用浏览器快速生成图标和启动屏幕 的指南。

¥Also, see the guide on creating a splash screen image, or quickly generate an icon and splash screen using your browser.

安装

¥Installation

Terminal
npx expo install expo-splash-screen

If you are installing this in an existing React Native app (bare workflow), start by installing expo in your project. Then, follow the additional instructions as mentioned by library's README under "Installation in bare React Native projects" section.

用法

¥Usage

此示例演示如何在加载应用资源时保持初始屏幕可见,然后在应用渲染一些初始内容时隐藏初始屏幕。

¥This example shows how to keep the splash screen visible while loading app resources and then hide the splash screen when the app has rendered some initial content.

App.js
import { useCallback, useEffect, useState } from 'react';
import { Text, View } from 'react-native';
import Entypo from '@expo/vector-icons/Entypo';
import * as SplashScreen from 'expo-splash-screen';
import * as Font from 'expo-font';

// Keep the splash screen visible while we fetch resources
SplashScreen.preventAutoHideAsync();

export default function App() {
  const [appIsReady, setAppIsReady] = useState(false);

  useEffect(() => {
    async function prepare() {
      try {
        // Pre-load fonts, make any API calls you need to do here
        await Font.loadAsync(Entypo.font);
        // Artificially delay for two seconds to simulate a slow loading
        // experience. Please remove this if you copy and paste the code!
        await new Promise(resolve => setTimeout(resolve, 2000));
      } catch (e) {
        console.warn(e);
      } finally {
        // Tell the application to render
        setAppIsReady(true);
      }
    }

    prepare();
  }, []);

  const onLayoutRootView = useCallback(async () => {
    if (appIsReady) {
      // This tells the splash screen to hide immediately! If we call this after
      // `setAppIsReady`, then we may see a blank screen while the app is
      // loading its initial state and rendering its first pixels. So instead,
      // we hide the splash screen once we know the root view has already
      // performed layout.
      await SplashScreen.hideAsync();
    }
  }, [appIsReady]);

  if (!appIsReady) {
    return null;
  }

  return (
    <View
      style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}
      onLayout={onLayoutRootView}>
      <Text>SplashScreen Demo! 👋</Text>
      <Entypo name="rocket" size={30} />
    </View>
  );
}

配置

¥Configuration

要配置 expo-splash-screen,请参阅以下 应用配置 属性。

¥To configure expo-splash-screen, see the following app config properties.

Are you using this library in a bare React Native app?

请参阅如何在 expo-splash-screen 存储库中的安装说明 中配置原生项目。

¥See how to configure the native projects in the installation instructions in the expo-splash-screen repository.

动画启动画面

¥Animating the splash screen

请参阅 with-splash-screen 示例,了解如何将任意动画应用到启动屏幕,例如淡出。你可以通过运行 npx create-react-native-app -t with-splash-screen 从本示例初始化一个新项目。

¥See the with-splash-screen example on how to apply any arbitrary animations to your splash screen, such as a fade out. You can initialize a new project from this example by running npx create-react-native-app -t with-splash-screen.

API

import * as SplashScreen from 'expo-splash-screen';

Methods

SplashScreen.hideAsync()

Hides the native splash screen immediately. Be careful to ensure that your app has content ready to display when you hide the splash screen, or you may see a blank screen briefly. See the "Usage" section for an example.

Returns:

Promise<boolean>

SplashScreen.preventAutoHideAsync()

Makes the native splash screen (configured in app.json) remain visible until hideAsync is called.

Important note: It is recommended to call this in global scope without awaiting, rather than inside React components or hooks, because otherwise this might be called too late, when the splash screen is already hidden.

Returns:

Promise<boolean>

Example

import * as SplashScreen from 'expo-splash-screen';

SplashScreen.preventAutoHideAsync();

export default function App() {
 // ...
}
Expo 中文网 - 粤ICP备13048890号