reactjs - 如何在加载内部图像之前暂停整个组件?

标签 reactjs image preload react-suspense

我有以下组件: 在这个组件中,有一个图像。 当我加载页面时,我意识到页面将首先加载,然后图像将稍后加载。如何在加载图像之前暂停整个页面? 我尝试使用后备方法将整个 div (id="container") 包装在 Suspense 组件中,但它似乎不适用于图像,而仅适用于组件。

如何在加载内部图像之前暂停整个组件?

import React from "react";
import resume from "../assets/Joe_Rogan_Resume.jpg";
import Banner from "./Banner";

const Resume = () => (
  <div id="container">
    <Banner styleclass="ResumePageBanner" h1text="My Resume" />
    <div className="resumePage">
      <div id="resume">
        <img src={resume} alt="Resume" />
      </div>
    </div>
  </div>
);

export default Resume;

最佳答案

React 16.x 中的 Suspense 组件仅允许您等待某些代码加载,而不是任何类型的数据(包括图像)。用于数据获取的 Suspense 仍处于实验阶段。因此,如果您不想使用不稳定的版本,则需要手动处理。

import React from "react";
import resume from "../assets/Joe_Rogan_Resume.jpg";
import Banner from "./Banner";

const Resume = () => {
  const [isImageLoaded, setIsImageLoaded] = React.useState(false);

  React.useEffect(() => {
    const image = new Image();
    image.onload = () => setIsImageLoaded(true);
    image.src = resume;

    return () => {
      image.onload = null;
    };
  }, []);

  if (!isImageLoaded) {
    return null;
  }

  return (
    <div id="container">
      <Banner styleclass="ResumePageBanner" h1text="My Resume" />
      <div className="resumePage">
        <div id="resume">
          <img src={resume} alt="Resume" />
        </div>
      </div>
    </div>
  );
}

export default Resume;

关于reactjs - 如何在加载内部图像之前暂停整个组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62558448/

相关文章:

java - 读取图像时出错

html - 鼠标悬停在图像上时显示文本

c# - 使用 .NET/WPF 预加载图像资源

Javascript 图像预加载无法正常工作

javascript - 如何使用 Amplify with Javascript 返回 AWS 用户池中的用户状态?

javascript - React hooks 第一次没有设置状态

reactjs - react : Fix missing dependency warning useEffect with Refs

javascript - 如何使用 react router dom 6 为主页添加多个路径?

python - 如何将pygame中的多个图像添加到网格上?

Javascript 函数类型错误