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

如何仅为Storybook或Chromatic禁用图片懒加载?

解决Storybook/Chromatic环境下图片懒加载导致的图片缺失问题

核心原因

Chromatic的截图渲染流程会快速捕获组件状态,而loading="lazy"会延迟图片加载,导致截图时图片还未完成加载,最终显示缺失。

解决方案:根据环境动态控制懒加载属性

你可以通过检测Storybook或Chromatic的环境变量,在对应环境下自动禁用懒加载,无需手动修改组件代码。

方法1:组件内直接判断环境变量

Storybook和Chromatic会自动注入专属环境变量,你可以在组件里直接读取这些变量来决定是否启用懒加载:

import React from 'react';

const YourImageComponent = ({ src, alt }) => {
  // 检测是否处于Storybook或Chromatic环境
  const isTargetEnv = process.env.STORYBOOK || process.env.CHROMATIC;
  // 仅在非目标环境启用懒加载
  const loadingAttr = isTargetEnv ? undefined : 'lazy';

  return <img src={src} alt={alt} loading={loadingAttr} />;
};

export default YourImageComponent;

方法2:全局统一配置(适合多组件场景)

如果多个组件都有这个问题,可以在Storybook的全局配置里设置参数,再在组件中读取:

  1. 在.storybook/preview.js中添加全局参数:
export const parameters = {
  // 标记当前是否为Chromatic环境
  isChromatic: process.env.CHROMATIC === 'true',
};
  1. 在组件中通过Storybook API读取参数:
import React from 'react';
import { useParameter } from '@storybook/api';

const YourImageComponent = ({ src, alt }) => {
  const isChromatic = useParameter('isChromatic', false);
  const isStorybook = !!process.env.STORYBOOK;
  const loadingAttr = (isStorybook || isChromatic) ? undefined : 'lazy';

  return <img src={src} alt={alt} loading={loadingAttr} />;
};

export default YourImageComponent;

方法3:CI构建时注入自定义环境变量

如果是在CI流程中运行Chromatic,可以通过命令行注入自定义变量来控制:

# 运行Chromatic时注入禁用懒加载的变量
CHROMATIC_DISABLE_LAZY=true npx chromatic

然后组件里判断这个变量:

const isDisableLazy = process.env.CHROMATIC_DISABLE_LAZY === 'true';
const loadingAttr = isDisableLazy ? undefined : 'lazy';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:50:25