javascript - 如何通过字符串动态导入icon/jsx元素?

标签 javascript reactjs next.js

我目前正在开发图标选择器。一旦选择了图标,选择器就会以字符串形式返回图标,例如 AirBalloon。然后,我想在我的页面上显示该图标,因此我需要导入它(我正在使用 https://www.npmjs.com/package/tabler-icons-react )。 通常,我会这样做 import {AirBallon} from 'tabler-icons-react';。 所以我尝试了这个:

<IconSelector
    active={iconSelectorActive}
    setIcon={setIcon}
    additionalEvent={async () => {
        console.log(icon); // Logs the icon I selected
        setActiveIcon((await import('../../node_modules/tabler-icons-react/dist/icons/' + icon)));
        }}
></IconSelector>

但是如果我尝试将它嵌入到我的 JSX 中:

<Button
    onClick={() =>
        setIconSelectorActive(!iconSelectorActive)
    }
    variant="PRIMARY"
>
    {activeIcon}
</Button>

当我单击选择器中的某个项目时,它会抛出错误错误:找不到模块'./'

如何解决这个问题?

最佳答案

首先,您需要从库中导入所有图标,如下所示:

import * as allIcons from "tabler-icons-react";

然后使用其名称检索所选图标,如下所示:

const iconNameToBeUsed = "Activity";
const IconToBeUsed = allIcons[iconNameToBeUsed];

最后渲染选定的图标jsx,如下所示:

<IconToBeUsed />

您可以看看this sandbox有关此解决方案的实时工作示例。

关于javascript - 如何通过字符串动态导入icon/jsx元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73846058/

相关文章:

javascript - Firebase 9 - 如何进行新文档引用

javascript - 如何禁用整个项目的 ESLint jsx-a11y/alt-text

javascript - 如何使用 delete 键从 XUL 中的树中删除对象?

javascript - 导航器组件是 react 原生应用程序中切换屏幕的唯一方法吗?

javascript - 如何: React serialise multidimensional array and unserialise it in PHP

reactjs - 如何从我的源导入 .txt 文件?

javascript - React、单页应用程序和浏览器的后退按钮

javascript - 将 javascript 中的 var 设置为标签中的值

javascript - Input::all() 在 FormData 对象通过后为空

javascript - 无法从 Amazon Cognito 用户池获取用户 session