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

如何在React中通过函数实现SVG图标切换?

实现React中SVG图标的切换功能

你可以通过React的状态管理来实现SVG图标的动态切换,以下是具体实现方案:

完整代码示例

import { useState } from 'react';
import { ReactComponent as Paint LayoutMan } challenge背后Cl的OR所有组件END插值�_auxiliary_text>
import { ReactComponent as Paint } from '../style/ImagesGame/PaintBrush.svg';
import { ReactComponent as MagicWand } from '../style/ImagesGame/MagicWand.svg';

function IconToggle() {
  // 用状态变量控制当前显示的图标,默认显示Paint
  const [isPaintActive, setIsPaintActive] = useState(true);

  // 切换图标的核心函数
  const toggleIcon = () => {
    setIsPaintActive(prevState => !prevState);
  };

  return (
    <div>
      {/* 根据状态渲染对应SVG组件 */}
      {isPaintActive ? <Paint /> : <MagicWand />}
      
      {/* 触发切换的按钮 */}
      <button onClick={toggleIcon}>切换工具图标</button>
      
      {/* 可选:让SVG本身可点击触发切换 */}
      {/* {isPaintActive ? <Paint onClick={toggleIcon} style={{ cursor: 'pointer' }} /> : <MagicWand onClick={toggleIcon} style={{ cursor: 'pointer' }} />} */}
    </div>
  );
}

export default IconToggle;

代码说明

  • 状态管理:使用useState钩子维护当前显示图标的状态,初始值true表示默认显示Paint图标。
  • 切换逻辑:toggleIcon函数通过反转状态值,实现两个SVG组件的切换渲染。
  • 条件渲染:利用三元运算符根据状态值动态渲染对应的SVG组件。
  • 触发方式:既可以通过独立按钮触发切换,也可以直接让SVG本身可点击(注释中提供了该写法)。

扩展方案(支持多图标切换)

如果后续需要切换更多图标,可以将状态改为存储图标的标识字符串,扩展性更强:

import { useState } from 'react';
import { ReactComponent as Paint } from '../style/ImagesGame/PaintBrush.svg';
import { ReactComponent as MagicWand } from '../style/ImagesGame/MagicWand.svg';
import { ReactComponent as Eraser } from '../style/ImagesGame/Eraser.svg';

function MultiIconToggle() {
  const [activeIcon, setActiveIcon] = useState('paint');

  const toggleIcon = () => {
    // 按顺序切换三个图标
    setActiveIcon(prev => {
      switch(prev) {
        case 'paint': return 'magicWand';
        case 'magicWand': return 'eraser';
        case 'eraser': return 'paint';
        default: return 'paint';
      }
    });
  };

  return (
    <div>
      {activeIcon === 'paint' && <Paint />}
      {activeIcon === 'magicWand' && <MagicWand />}
      {activeIcon === 'eraser' && <Eraser />}
      <button onClick={toggleIcon}>切换工具</button>
    </div>
  );
}

export default MultiIconToggle;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:31