在反应中,只有在所有数据可用后才显示组件?

Posted

技术标签:

【中文标题】在反应中,只有在所有数据可用后才显示组件?【英文标题】:In react, how to display component only after all data is available? 【发布时间】:2022-01-10 16:43:32 【问题描述】:

我有一个显示图像的组件。该组件还有一个菜单栏。

在最初的服务器请求期间,该组件始终显示菜单栏一瞬间,因为实际图像尚未加载。

如何在图片准备好后才显示菜单栏?

已编辑:

我可以确定图像的 URL 何时加载并可用。但是如何判断实际图像本身是否准备就绪?

【问题讨论】:

如果您共享一些代码,我可以更准确地回答,但是假设您有一个称为图像的状态,您从 api 获取图像后存储图像。在您的主要返回语句之前,您可以使用 if 并在未加载图像时返回加载指示符。 图片源是本地磁盘还是其他的问题请多加点,分享一个代码sn-p其实很有帮助,胡乱猜测我觉得你需要实现的条件渲染仅当图像可用时才使用组件,以防您从远程源获取它。从本地磁盘有时需要几毫秒,具体取决于图像格式的大小。 【参考方案1】:

您可以使用部分渲染 例如

import React,  useEffect, useState  from 'react';

    function App() 
    
    
      const [data, setData] = useState(null);
    
      useEffect(()=>
        setData(true);
      , []);
    
      return (
        <div>
          data && <div> after data is not null this will be visible</div>
        </div>
      );
    
    export default App;

【讨论】:

【参考方案2】:

您可以设置如下状态并根据该值加载菜单;

const [ImageLoaded, setImageLoaded] = useState(false);

【讨论】:

【参考方案3】:

你可以这样做:

function YourComponent () 
    
    const [imgLoaded, setImgLoaded] = useState(false);
   
    const handleImgLoad = () => 
        setImgLoaded(true);
    

    return(
        <>
            <img onLoad=handleImgLoad src="..."  />
            imgLoaded ? <MenuBar /> : <></>
        </>
    );

【讨论】:

以上是关于在反应中,只有在所有数据可用后才显示组件?的主要内容,如果未能解决你的问题,请参考以下文章

我试图隐藏和显示来自反应堆的卡组件中的数据

根据道具值显示组件反应

为啥反应显示组件更新但控制台不更新?

文本组件以相反的顺序显示行

尝试使用地图在反应组件中显示键/值对?

在浏览器的后退按钮上反应路由器历史记录