发布于 2026-01-05 0 阅读
0

React - 异步图像加载 DEV 的全球展示与分享挑战赛,由 Mux 呈现:展示你的项目!

React - 异步图像加载

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

你好!👋 😊

你知道吗?如果在页面加载完成后再加载图片,用户就能更早看到内容,SEO工具也会检测到页面加载速度更快。🚀📈

在开始之前,我强烈建议您查看我们网站上提供的解决方案示例: React - 异步图像加载

在本文中,我想向您展示如何在 React 中创建一个简单的组件,该组件会在所有资源加载完毕后加载图形。

这种方法将加载过程分为两个步骤,从而加快页面加载速度:

  • 页面加载(不使用异步图片)——我们可以更快地看到所有必要的内容,并且顺序正确。
  • 异步图片加载 - 图片在页面准备就绪后加载。

最终效果: 页面渲染完成后(准备就绪时),当图像加载完毕时,箭头会标记线条。图像

下面我向您展示一种解决方案,其中我创建了一个仅存在于内存中的对象image,加载完成后,该对象会发出信号,在 React 中于网页上显示正确的图像。

实际例子:



import React from 'react';

const AsyncImage = (props) => {
    const [loadedSrc, setLoadedSrc] = React.useState(null);
    React.useEffect(() => {
        setLoadedSrc(null);
        if (props.src) {
            const handleLoad = () => {
                setLoadedSrc(props.src);
            };
            const image = new Image();
            image.addEventListener('load', handleLoad);
            image.src = props.src;
            return () => {
                image.removeEventListener('load', handleLoad);
            };
        }
    }, [props.src]);
    if (loadedSrc === props.src) {
        return (
            <img {...props} />
        );
    }
    return null;
};

const App = () => {
    return (
      <div>
        <AsyncImage src="https://dirask.com/static/bucket/1574890428058-BZOQxN2D3p--image.png" />
        <p>Some text here ...</p>
        <AsyncImage src="https://dirask.com/static/bucket/1590005168287-pPLQqVWYa9--image.png" />
        <p>Some text here ...</p>
        <AsyncImage src="https://dirask.com/static/bucket/1590005138496-MWXQzxrDw4--image.png" />
        <p>Some text here ...</p>
        <AsyncImage src="https://dirask.com/static/bucket/1590005318053-3nbAR5nDEZ--image.png" />
      </div>
    );
};

export default App;


Enter fullscreen mode Exit fullscreen mode

我建议将解决方案复制到本地 React 项目中,打开浏览器中的开发者工具,然后运行应用程序以查看结果。

如果您觉得这篇文章有用,并且想看到更多类似的内容,可以点赞或评论一下,我会非常开心!😊

下次再见!🖐


给我们写信吧!✉

如果您有任何关于 React 或 JavaScript 的问题需要解决,或者有其他人无法解答的问题,又或者您正在寻找导师,请访问dirask.com -> Questions向我们提问。

文章来源:https://dev.to/diraskreact/react-async-image-loading-lka