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

React MUI Slide组件搭配SVG图标不显示问题求助

解决React MUI Slide组件搭配SVG仅显示白框的问题

问题根源

你代码里用<Box component="svg">嵌套img标签的方式存在冗余:这种结构会导致SVG容器没有正确的尺寸,Slide动画执行时只会渲染空容器,所以只显示白框,实际SVG内容无法正常加载显示。

解决方法

直接移除冗余的SVG容器,改用以下两种正确方式引入并显示SVG:

方式1:直接使用img标签(最简单)

去掉<Box component="svg">,直接用img标签加载SVG,同时指定明确宽高确保内容正常显示:

import { Paper, Slide, Box, Button } from '@material-ui/core';
import { useState } from 'react';
import OfficeWorker from './OfficeWorker.svg';

const TestButtons = () => {
  const [buyButtonClicked, setBuyButtonClicked] = useState(false);

  const onBuyNow = () => {
    setBuyButtonClicked(true);
  };

  const OfficeWorkerIcon = (
    <Paper elevation={4} style={{ padding: 8 }}>
      <img src={OfficeWorker} alt="Office Worker" width={100} height={100} />
    </Paper>
  );

  return (
    <Box>
      <Box marginRight={3} display="flex" gap={2}>
        <Button onClick={onBuyNow}>Buy it now</Button>
        <Button>Questions? Give us a call!</Button>
      </Box>

      <Slide direction="right" in={buyButtonClicked} mountOnEnter unmountOnExit>
        {OfficeWorkerIcon}
      </Slide>
    </Box>
  );
};

export default TestButtons;

方式2:将SVG作为React组件导入(更灵活)

如果你的项目支持(比如Create React App默认支持),可以直接把SVG当作React组件导入,通过props控制尺寸、颜色等属性:

import { Paper, Slide, Box, Button } from '@material-ui/core';
import { useState } from 'react';
// 直接导入SVG为React组件
import OfficeWorker from './OfficeWorker.svg';

const TestButtons = () => {
  const [buyButtonClicked, setBuyButtonClicked] = useState(false);

  const onBuyNow = () => {
    setBuyButtonClicked(true);
  };

  const OfficeWorkerIcon = (
    <Paper elevation={4} style={{ padding: 8 }}>
      <OfficeWorker width={100} height={100} />
    </Paper>
  );

  return (
    <Box>
      <Box marginRight={3} display="flex" gap={2}>
        <Button onClick={onBuyNow}>Buy it now</Button>
        <Button>Questions? Give us a call!</Button>
      </Box>

      <Slide direction="right" in={buyButtonClicked} mountOnEnter unmountOnExit>
        {OfficeWorkerIcon}
      </Slide>
    </Box>
  );
};

export default TestButtons;

额外注意事项

  • 确认SVG文件路径正确,无拼写错误
  • 给Paper组件添加padding可避免SVG紧贴边框,提升视觉效果
  • 若为自定义webpack配置,需配置@svgr/webpack或类似loader才能将SVG作为组件导入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:33