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

React Native中如何通过字符串选择图标而非传入Props

问题

我拥有<A/>、<B/>、<C/>这几个SVG图标,希望在<MyButton>组件中使用它们。当前用法如下:

MyButton.js

function MyButton(props) {
  return (
    <TouchableOpacity>
      {props.icon}
      <Text>{props.title}</Text>
    </TouchableOpacity>
  );
}

App.js

import A from "./A";
import B from "./B";
import C from "./C";

function App() {
      return (
        <MyButton icon={<A/>} title={'Example'} />
      );
    }

我希望能够通过字符串选择图标,而非直接传入组件作为Props,期望用法如下:

期望的App.js写法

function App() {
      return (
        <MyButton icon={"a"} title={'Example'} />
      );
    }

请问该如何实现?

解决方案

可以通过创建图标映射表实现字符串到组件的转换,具体步骤如下:

1. 在MyButton组件中创建图标映射

先把所有需要用到的SVG组件导入到MyButton里,再创建一个键值对对象,键是你要使用的字符串标识,值对应SVG组件:

// MyButton.js
import A from "./A";
import B from "./B";
import C from "./C";

// 图标映射表:键为字符串标识,值为对应SVG组件
const IconMap = {
  a: A,
  b: B,
  c: C
};

function MyButton(props) {
  // 根据传入的icon字符串获取对应组件,toLowerCase兼容大小写输入
  const IconComponent = IconMap[props.icon?.toLowerCase()];
  
  return (
    <TouchableOpacity>
      {/* 匹配到组件就渲染,未匹配则不显示图标 */}
      {IconComponent && <IconComponent />}
      <Text>{props.title}</Text>
    </TouchableOpacity>
  );
}

2. 可选:添加默认图标兜底

如果传入的字符串没有匹配到任何图标,可以设置默认图标,避免按钮出现空白:

// 先导入默认图标
import DefaultIcon from "./DefaultIcon";

const IconMap = {
  a: A,
  b: B,
  c: C,
  default: DefaultIcon
};

function MyButton(props) {
  // 未匹配到则使用默认图标
  const IconComponent = IconMap[props.icon?.toLowerCase()] || IconMap.default;
  
  return (
    <TouchableOpacity>
      <IconComponent />
      <Text>{props.title}</Text>
    </TouchableOpacity>
  );
}

3. 最终使用方式

现在就可以按照期望的方式传字符串选择图标:

// App.js
import MyButton from "./MyButton";

function App() {
  return (
    <>
      <MyButton icon={"a"} title={'带A图标的按钮'} />
      <MyButton icon={"B"} title={'带B图标的按钮'} />
      <MyButton icon={"c"} title={'带C图标的按钮'} />
    </>
  );
}

补充说明

  • 映射表的键可以自定义(比如"iconA"、"iconB"),只要保持传入的字符串和键一致即可
  • 如果图标数量较多,建议把映射表单独抽成iconMap.js文件,方便统一维护和跨组件复用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20