javascript - React js如何使用异步超时返回div
问题描述
我试图在我的主要返回中为一个定时组件返回一小段代码。在我返回时,我希望在等待 5 秒后显示 myFunction div(如果满足条件),但它似乎只显示一个错误。我查看了 react 文档,看来您确实可以调用一个函数来返回 html/jsx,所以我不确定自己做错了什么。这是我在该区域的代码:
function myFunction(){
return (
<div className="error-container">
<h1>Oops!</h1>
<h2>I ate the page you're looking for</h2>
<img className="errorImage" src={ErrorImage} alt= 'website error' />
<Link to='/'><button className="errorButton"> Back to Home </button></Link>
</div>
);
}
const add5SecondsDelay = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve(myFunction());
}, 50000);
});
}
async function asyncFunctionCall() {
const result = await add5SecondsDelay ();
}
return (
<div className="detail-container">
{(() => {
if(!item.name){
return (
<div>
{asyncFunctionCall()}
</div>
)
} else{
我对这类事情还很陌生,所以我可能会搞砸我的承诺或其他什么。我只是不知道如何让它在 5 秒后返回我的 HTML/JSX。
解决方案
您可以使用 useEffect 钩子等待这 5 秒并更改变量的状态,然后在返回时执行以下操作:
import React, { useState, useEffect } from 'react';
const MyDiv = () => (<div>Hi</div>)
const YourComponent = () => {
const [isDivVisible , setIsDivVisible ] = useState(false)
useEffect(() => {
const timer = setTimeout(() => {
setIsDivVisible(true)
console.log('5 seconds later')
}, 5000);
return () => clearTimeout(timer);
}, []);
return isDivVisible ? <MyDiv/> : <div>Loading</div>
}
推荐阅读
- python - 尝试将 tensorflow 与 repl-it 一起使用时出现问题
- performance - 为什么 devenv.exe 在系统启动时扫描我的光盘
- shell - 在循环中插入到 shell 数组
- unity3d - Unity - 如何对场景选择做出反应?如何通过在场景视图中选择其子项来强制选择父项
- julia - Julia:如何将网格图中的 x 轴与 Plots.jl 对齐?
- r - 将滑块和图像并排放在dashboardBody上
- c++ - 程序中哪里可能存在任何问题,以及我如何使用 lock() 和 unlock() 解决这些问题?
- swift - 在“WIREGUARD”版本 1.0.12 中创建隧道
- c# - C# 索引超出范围
- macos - 使用 Apple Video Toolkit 进行 H264 解码