如何从React中基于变量的给定名称导入和渲染svg文件?

戴维德·巴纳科夫斯基(Dawid Banachowski)

问题

我有很多类别,并且有一个变量,其值为类别之一,可以说

const categories = ['a1', 'a2', ..., 'a200'];
const category = 'a57';

我有一个与每个类别名称相对应的svg文件:'a1.svg','a2.svg',...,'a200.svg'

我的问题是,我只需要基于一个来自categorys数组的变量来渲染一个svg文件,就不能将其渲染为图像,因为我需要能够更改其fill / stroke值。

<img src={`./images/${category}.svg} />

我试图像这样导入所有的svg

import {ReactComponent as a1} from './images/ai.svg';

并将所有这些导入放置在数组中。但是,当我以这种方式进行操作时,我有一个像这样的对象数组从理论上讲我可以使用它,但是我的某些类别中有空格和其他符号,并且我不能使用.render.name值,因为您不能像这样{ReactComponent as martial arts}导入这也是令人不舒服的原因,因为我需要做很多导入而不是做类似的事情

const images = categories.map(category => {
  return {
    name: category,
    svg: require(`./images/${category}.svg`
  }
})

我也试图制作一个看起来像这样的对象数组

const images = [ {name: 'a1', svg: a1}, {name: 'a2', svg: a2} ];

并渲染为

{images.find(img => img.name === category).svg}

但我不能导致它给我这个错误

错误:对象作为React子对象无效(找到:键为{$$ typeof,render}的对象)。如果要渲染子级集合,请改用数组。

目标

根据category变量仅渲染一个svg组件,该组件的值可以是category数组中的任何内容。另外,如何以一种允许我轻松呈现svg并在CSS中更改其填充/描边值的方式正确导入这些svg。

类似这样的导入工作的东西

import {ReactComponent as imageCategory} from `./images/${category}.svg`
莱塞特

错误:

错误:对象作为React子对象无效(找到:键为{$$ typeof,render}的对象)。如果要渲染子级集合,请改用数组。

发生这种情况是因为您没有呈现组件,而只是获得了组件实例:

const Svg = images.find(img => img.name === category).svg //--> component instance

return <Svg /> //--> render it

//--> **Note:** this just an example it won't work because it won't find the module.

使它起作用

如果使用Webpack,则可以使用require.context

const svgDir = require.context("!@svgr/webpack!./images");

const images = categories.map(category => {
  return {
    name: category,
    svg: svgDir(`./${category}.svg`).default
  }
});

然后:

 const renderImgByCategory = (category) => {
     const Svg = images.find(img => img.name === category).svg;
     return <Svg/>
 }

JSX:

{renderImgByCategory(category)}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将变量的给定名称内插到字符串中?

来自分类Dev

如何获取给定名称和父目录句柄或 inode 的文件大小?

来自分类Dev

如何删除所有子目录中具有给定名称的所有文件?

来自分类Dev

如何编写一个删除给定目录中除具有给定名称的文件之外的每个文件的oneliner?

来自分类Dev

如何查找具有给定名称空间的关联文件?

来自分类Dev

如何查找具有给定名称的多行文件?

来自分类Dev

如何查找具有给定名称空间的关联文件?

来自分类Dev

在动作脚本3中,如何基于另一个变量的值动态包含具有特定名称的文件?

来自分类Dev

如何在Freebase中搜索给定名称

来自分类Dev

使用 PowerShell 重命名目录和子文件夹中具有给定名称的批量文件

来自分类Dev

在Azure B2C内置策略中如何使用给定名称和姓氏生成显示名称?

来自分类Dev

使用更改名称的文件夹中具有给定名称的Python打开文件

来自分类Dev

查找和正则表达式-查找名称以给定名称开头的文件

来自分类Dev

当type包含具有给定名称和类型的静态变量时,enable_if函数

来自分类Dev

在循环变量中重用具有给定名称的VAR?

来自分类Dev

查找具有给定名称的文件或键入具有给定名称的目录

来自分类Dev

在main.xml文件中找不到与给定名称匹配的资源

来自分类Dev

如何获取给定名称和形式参数类型的Method对象?

来自分类Dev

如何只获取给定名称的FTP目录中的内容?

来自分类Dev

如何将具有给定名称标签的元素保留在数组中?

来自分类Dev

如何基于父标记中的给定属性获取文件名和路径

来自分类Dev

如何杀死具有给定名称的所有进程?

来自分类Dev

如何在角度删除给定名称的标题?

来自分类Dev

如何杀死具有给定名称的所有进程?

来自分类Dev

如何找到具有给定名称的祖先目录?

来自分类Dev

Firebase 如何添加具有给定名称的子节点?

来自分类Dev

在R中的data.frame中提取和绑定名称相似的变量

来自分类Dev

如何在文件夹名称中获取特定名称

来自分类Dev

如何在VBA中打开具有特定名称的文件夹中的文件?

Related 相关文章

  1. 1

    如何将变量的给定名称内插到字符串中?

  2. 2

    如何获取给定名称和父目录句柄或 inode 的文件大小?

  3. 3

    如何删除所有子目录中具有给定名称的所有文件?

  4. 4

    如何编写一个删除给定目录中除具有给定名称的文件之外的每个文件的oneliner?

  5. 5

    如何查找具有给定名称空间的关联文件?

  6. 6

    如何查找具有给定名称的多行文件?

  7. 7

    如何查找具有给定名称空间的关联文件?

  8. 8

    在动作脚本3中,如何基于另一个变量的值动态包含具有特定名称的文件?

  9. 9

    如何在Freebase中搜索给定名称

  10. 10

    使用 PowerShell 重命名目录和子文件夹中具有给定名称的批量文件

  11. 11

    在Azure B2C内置策略中如何使用给定名称和姓氏生成显示名称?

  12. 12

    使用更改名称的文件夹中具有给定名称的Python打开文件

  13. 13

    查找和正则表达式-查找名称以给定名称开头的文件

  14. 14

    当type包含具有给定名称和类型的静态变量时,enable_if函数

  15. 15

    在循环变量中重用具有给定名称的VAR?

  16. 16

    查找具有给定名称的文件或键入具有给定名称的目录

  17. 17

    在main.xml文件中找不到与给定名称匹配的资源

  18. 18

    如何获取给定名称和形式参数类型的Method对象?

  19. 19

    如何只获取给定名称的FTP目录中的内容?

  20. 20

    如何将具有给定名称标签的元素保留在数组中?

  21. 21

    如何基于父标记中的给定属性获取文件名和路径

  22. 22

    如何杀死具有给定名称的所有进程?

  23. 23

    如何在角度删除给定名称的标题?

  24. 24

    如何杀死具有给定名称的所有进程?

  25. 25

    如何找到具有给定名称的祖先目录?

  26. 26

    Firebase 如何添加具有给定名称的子节点?

  27. 27

    在R中的data.frame中提取和绑定名称相似的变量

  28. 28

    如何在文件夹名称中获取特定名称

  29. 29

    如何在VBA中打开具有特定名称的文件夹中的文件?

热门标签

归档