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

在react render[duplicate]中使用异步和等待

楚宏胜
2023-03-14

我试图在反应本机中捕捉状态栏的高度。

为此我写了以下代码

render() {
    let StatusBarHeight = null
   if (Platform.OS === 'ios') {
     StatusBarHeight = StatusBarManager.getHeight((statusBarHeight)=>{
                console.log(statusBarHeight)
                return statusBarHeight
            })
     console.log(`This is the height of the status bar in iOS:`,StatusBarHeight)
    }
}

在这里,console.log(statusBarHeight)显示为{height:44},我打算将其存储在statusBarHeight中,但之后的第二个console.log给了我未定义的值

console.log(`This is the height of the status bar in iOS:`,StatusBarHeight)

这让我想到StatusBarManager.getHeigh(async函数。那么,有人能帮我计算一下高度吗?我们如何使用async wait来呈现react native

共有2个答案

司易安
2023-03-14

如果你想在没有听众的情况下获得高度,你可以通过以下方式做到:

const height = await StatusBarHeight.getAsync();
慕容宇
2023-03-14

你不应该在渲染函数中使用异步函数,因为它会阻止你的渲染,它应该总是响应,而不是阻止你的整个应用程序,如果你延迟渲染函数会发生这种情况。将你的statusBarHeight保存在状态中,并在渲染函数中访问它,并且只在外部更改时更新它(例如组件)。

第二个console.log返回未定义,因为渲染不等待promise(StatusBarManager.getHeight)来解决,并将立即执行渲染函数。解决promise后,您将看到具有statusBarHeight的其他console.log。所以本质上,不,你不能也不应该使渲染异步并将其保存在其他地方。

 类似资料:
  • 我想进行一个基于当前状态的API调用,但不能使setState函数作为异步函数工作。 给我错误: 类型为“”的参数(状态:只读)= 如果我在setState方法之外获取数据,它会起作用,但我害怕对过时的页码进行API调用:

  • 在node.js我需要使用一个,其中包含Array.foreach处理将每个元素插入到db中,但整个函数应该在完成所有插入操作后返回响应 JavaScript代码 如上所述,最后一个返回语句不等待执行首先完成。

  • 问题内容: 我认为节点7.4支持异步/等待,但是此示例不起作用: 结果是: 如何在节点7.4上使用异步/等待? 问题答案: 是的,Node.js v7支持async-await,但将其锁定在标志后面。尚未准备就绪的功能不在此标记后面。 要在Node.js v7中使用async-await,只需使用此标志运行Node服务- async-await的正式发行版预定于4月启动的Node.js v8。 您

  • 我以为async/wait在节点7.4中得到了支持,但是这个例子不起作用: 结果: 如何在node 7.4中使用async/await?

  • 我想使用异步并等待处理承诺。我想在下面的示例中使用这个方法: 在执行时,它给了我一个错误 错误: UnhandledPromiseRejectionWarning:未处理得承诺拒绝.这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:3)

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会实现您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预