javascript - 如何暂停渲染直到承诺解决?反应式
问题描述
我想从 Promise 中检索一个字段(暂时)并将其呈现为我的弹出模式中的标题。我得到了通过使用来解决的承诺useEffect
,它确实填充了我的模态,但是在等待响应被设置值时,它的出现会有轻微的延迟。
我尝试在同一个文件中在 Modal 下面创建另一个函数来使用aync/await
,但是我很难弄清楚它们的放置位置,因为我不断收到错误使用它的错误,或者没有任何来自 promise 的传回。
import React, { useState, useEffect } from 'react';
import './Modal.css';
const Modal = ({close, item}) => {
const [response, setResponse] = useState(null);
useEffect(() => {
item.then(object => setResponse(object.data.title))
}, [])
return (
<div className='modal'>
<div className='popup'>
<h1>{response}</h1>
<button onClick={ () => { close(false) }}>close me</button>
</div>
</div>
);
}
export default Modal;
解决方案
问题是,您正在渲染组件并且该组件正在等待解决承诺,您应该在承诺已解决后在 Modal 组件的父级上添加模式,不要尝试暂停执行,这真的有问题,只需让 react 使用通用规则渲染(如果有新的 prop -> 渲染,如果有状态更改 -> 渲染),状态更改假定实际组件已经渲染。
推荐阅读
- java - Android Java İimageview 与进度
- javascript - 为什么我登录时我的登录页面加载缓慢
- azure - 添加 Azure Kinect 时的身体跟踪
- go - TCP 服务器无法识别已关闭的物联网设备
- angular - 使用 ngModel 和 ngValue Angular 4 和 JHipster 时获取未定义的值
- wpf - WPF 绑定未引发数据模板类型扩展器的属性更改事件
- c - 为什么我会收到陷阱 14 消息,其中动态数组保存在堆栈中
- java - 如何使用 Ajax 将 system.out.println("xyz") 语句从逻辑方法打印到 GUI
- html - 透明图像以查看彩色背景
- reactjs - nextjs 重定向默认路由