You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为测试实现组件延迟渲染?附Loading组件与react-loadable代码

实现基于React Loadable的组件延迟渲染方案

嘿,我来帮你搞定组件延迟渲染的需求!结合你现有的Loading组件,用react-loadable就能轻松实现「只有当组件加载耗时超过设定阈值时才显示Loading」的效果,避免短时间加载时的闪烁问题。

第一步:确保安装react-loadable

首先确认你已经安装了react-loadable,如果还没装,执行下面的命令:

npm install react-loadable
# 或者用yarn
yarn add react-loadable

第二步:修正你的Loading组件小问题

我注意到你现有Loading组件里有个小bug——解构了message参数,但渲染时用了props.message,会导致报错,先把这个修正过来:

import React from 'react';
import './Loading.sass';

const Loading = ({ message, pastDelay }) => {
  if (pastDelay) {
    return (
      <div className="loading-bro">
        <h1>{message}</h1>
        <svg id="load" x="0px" y="0px" viewBox="0 0 150 150">
          <circle id="loading-inner" cx={75} cy={75} r={60} />
        </svg>
      </div>
    );
  } else {
    return null;
  }
};

export default Loading;

第三步:用React Loadable包裹目标组件

接下来,把你需要延迟渲染的组件用Loadable包裹起来,通过配置delay参数来设置延迟阈值(比如300ms,你可以根据需求调整):

import React from 'react';
import Loadable from 'react-loadable';
import Loading from './Loading'; // 导入你的Loading组件

// 定义需要异步加载的目标组件
const AsyncTargetComponent = Loadable({
  // 动态导入目标组件
  loader: () => import('./TargetComponent'), // 替换成你实际的组件路径
  // 指定加载时显示的组件
  loading: Loading,
  // 设置延迟时间:只有加载耗时超过300ms时,才会让Loading的pastDelay变为true
  delay: 300,
  // 给Loading组件传递额外props
  loadingProps: {
    message: '正在加载中...'
  }
});

// 在你的应用中使用这个异步组件
const App = () => {
  return (
    <div>
      <AsyncTargetComponent />
    </div>
  );
};

export default App;

关键逻辑说明

  • delay参数:设置的是「等待多久后才显示Loading」的阈值,比如300ms。如果目标组件在300ms内加载完成,Loading组件的pastDelay会一直是false,不会渲染任何内容;只有当加载时间超过300ms时,pastDelay才会变为true,Loading才会显示出来。
  • loadingProps:用来给你的Loading组件传递自定义参数,比如这里的message,你可以根据需要添加更多属性。

可选扩展:处理加载错误

如果需要处理组件加载失败的情况,可以给Loading组件添加error属性,扩展一下:

const Loading = ({ message, pastDelay, error }) => {
  if (error) {
    return <div className="loading-bro">加载失败,请稍后重试</div>;
  }
  if (pastDelay) {
    return (
      <div className="loading-bro">
        <h1>{message}</h1>
        <svg id="load" x="0px" y="0px" viewBox="0 0 150 150">
          <circle id="loading-inner" cx={75} cy={75} r={60} />
        </svg>
      </div>
    );
  } else {
    return null;
  }
};

这样就完整实现了组件的延迟渲染功能啦!

内容的提问来源于stack exchange,提问作者Harry Blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:51:21