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

如何在Storybook中模拟NextJS的next/future/image组件

在Storybook中模拟Next.js的next/future/image组件

1. 编写模拟组件

在项目中创建一个模拟组件文件(比如src/components/mocks/MockNextFutureImage.tsx),实现与next/future/image一致的核心props,用普通<img>标签替代Next.js的环境依赖逻辑:

import React from 'react';

interface MockNextFutureImageProps {
  src: string;
  alt: string;
  width?: number | string;
  height?: number | string;
  className?: string;
  // 按需添加其他需要的props
}

const MockNextFutureImage: React.FC<MockNextFutureImageProps> = ({
  src,
  alt,
  width,
  height,
  className,
}) => {
  return (
    <img
      src={src}
      alt={alt}
      style={{ width, height, objectFit: 'cover' }}
      className={className}
    />
  );
};

export default MockNextFutureImage;

2. 配置Storybook的Webpack别名

修改.storybook/main.js,添加Webpack别名规则,将next/future/image指向你写的模拟组件:

module.exports = {
  // 其他Storybook配置
  webpackFinal: async (config) => {
    config.resolve.alias = {
      ...config.resolve.alias,
      'next/future/image': require.resolve('../src/components/mocks/MockNextFutureImage.tsx'),
    };
    return config;
  },
};

3. 处理图片资源加载

确保Storybook能正确解析图片资源,可通过storybook-addon-next-images插件实现:

  • 安装插件:npm install storybook-addon-next-images --save-dev
  • 在.storybook/main.js的addons数组中添加:
addons: [
  // 其他addons
  'storybook-addon-next-images',
],

也可以手动配置Webpack的file-loader/url-loader来处理图片格式。

4. 在Stories中正常使用

现在可以在stories文件中直接导入next/future/image,Webpack会自动替换为模拟组件,写法和Next.js项目中一致:

import Image from 'next/future/image';
import MyComponent from '../MyComponent';

export default {
  title: 'Components/MyComponent',
  component: MyComponent,
};

export const Default = () => (
  <MyComponent>
    <Image src="/example.jpg" alt="示例图片" width={300} height={200} />
  </MyComponent>
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20