当前位置: 首页 > 知识库问答 >
问题:

React Native+Expo:等待时间后和页面完成时启动屏幕关闭

颛孙喜
2023-03-14

初始化模板“Tabs”Expo项目后,React原生应用程序的启动例程如下所示:

React.useEffect(() => {
  async function loadResourcesAndDataAsync() {
    try {
      SplashScreen.preventAutoHide();

      // Load our initial navigation state
      setInitialNavigationState(await getInitialState());

      // Load fonts
      await Font.loadAsync({
        ...Ionicons.font,
        'space-mono': require('./assets/fonts/SpaceMono-Regular.ttf'),
      });
    } catch (e) {
      // We might want to provide this error information to an error reporting service
      console.warn(e);
    } finally {
      setLoadingComplete(true);

      SplashScreen.hide();
    }
  }

  loadResourcesAndDataAsync();
}, []);

世博关于让“闪屏持续更长时间”的文件简单地说明:

import { SplashScreen } from 'expo';

SplashScreen.preventAutoHide();
setTimeout(SplashScreen.hide, 5000);

问题是,如果背景/下一个视图仍在呈现,我希望启动屏幕保持不变,而不是简单地等待任意的时间。例如,如果渲染时间需要0.2秒,而我希望启动页面打开2秒,我希望启动页面在2秒后关闭。如果渲染时间需要2.8秒,我希望启动页面保持2.8秒。实现这一点的最佳方法是什么?

共有1个答案

卫高明
2023-03-14

尝试“ComponentDidMount”生命周期函数。反应-生命周期-方法-图

这里有这样的想法:

  1. 首先呈现初始屏幕,在初始屏幕的“组件未安装”功能中,开始呈现下一个屏幕/背景部分/附加部分。
  2. 一旦呈现下一个屏幕/背景类/附加类,在该类的“Component DidMount”中,更新状态(初始类或全局存储(如redux/mobox))中的标志,以通知初始屏幕“它”准备就绪。
  3. 最后,在启动屏幕中,创建一个计时器,例如2秒后,每隔100ms检查一次标志的状态,如果它准备就绪,则执行。

顺便说一下,如果下一个屏幕加载不是那么慢的话,在我看来这有点过于熟练了。

 类似资料:
  • 问题内容: 我看过许多使用这种语法的示例,但是看不到我做错了什么。“ then”函数在ajax调用返回之前正在运行。 我也尝试过使用$ .deferred和其他一些模式无济于事。 有人可以看到我所缺少的吗? 我已经调试,可以看到在ajax调用返回其成功(或错误)数据之前,已完成/然后内部进行的调用。 谢谢你的帮助。 主要电话: 它正在调用以下ajax函数: 谢谢! 验尸: 除了将返回值添加到aja

  • 我使用一个空活动为我的应用程序创建了一个启动屏幕,该活动在背景图像中保持可见3秒钟。通常,应用程序在背景图像变为可见之前以白色屏幕启动,然而,有些应用程序已经以“真实”的初始屏幕图像启动。如何实现这一点?

  • 问题内容: 我正在使用Ubuntu 16.04 问题答案: 我遇到了这个问题,终于找到了答案。我一直在使用Marionette驱动程序,该驱动程序不再适用于FF版本53和Selenium 3.5或更高版本。该GeckoDriver文档显示系统属性应该如何引用。 我从以下位置更改了代码: 至: 现在我的本地Firefox运行正常。 希望这对其他人有帮助。

  • 问题内容: 我希望浏览器将页面保持打开状态,直到发送ajax请求为止。这就是我想像的样子 不幸的是,JS不执行多线程。据我了解,回调(ajaxFinished)将永远不会执行,因为浏览器将尝试等待while循环完成以执行它,因此,它将永远循环。 什么是正确的方法?也许有一种方法可以迫使JS评估待办事项列表中的下一件事,然后返回while循环?还是一些与ajax调用“联接”的语法?我正在为我的aja

  • 问题内容: 题 我想启动Chrome网络浏览器作为访问特定网站的过程,然后等待它关闭。 一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该使我的等待过程感到困惑:要么,我想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到将其关闭,或者保留现有的浏览器窗口,并等

  • 问题内容: 题 我想启动Safari Web浏览器作为访问特定网站的过程,然后等待直到它关闭。 一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该让我的等待过程感到困惑:我要么想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到关闭该窗口,要么保留现有的浏览器窗