如果你在执行 requireAll(requireSvg)
后得到的是一个 BrowserSpriteSymbol
数组,并且能够直接使用 <use>
进行引用,这通常意味着在构建过程中有一些特定的 Webpack 配置和/或自定义加载器(loader)被用来处理 SVG 文件,并将它们转换为一个 SVG Sprite,其中每个 SVG 都转换为了一个 <symbol>
。
具体步骤如下:
-
require.context
: 使用require.context
创建一个特定的上下文,这个上下文允许你动态地require
模块。在你的例子中,requireSvg
被设置为指向./assets/svg
目录下所有以.svg
结尾的文件。 -
requireAll
函数: 这个函数接收一个requireContext
作为参数,并使用map
方法遍历requireContext.keys()
返回的所有模块键(即文件路径)。然后,它使用requireContext
函数来动态地require
这些模块。由于require
会执行导入的代码,因此它会执行由 Webpack 配置的加载器所指定的任何转换。 -
Webpack 配置和加载器: 在你的项目中,很可能有一个或多个加载器(如
svg-sprite-loader
、svg-url-loader
或自定义加载器)被配置来处理 SVG 文件。这些加载器会在require
被调用时运行,将 SVG 文件转换成一个统一的 SVG Sprite,其中每个 SVG 都被转换成一个<symbol>
元素。 -
返回
BrowserSpriteSymbol
数组: 假设svg-sprite-loader
或其他类似的加载器被配置为生成一个全局可访问的 SVG Sprite,并且每个 SVG 被转换为一个<symbol>
。在这种情况下,requireAll(requireSvg)
将返回一个数组,该数组包含对 SVG Sprite 中每个<symbol>
的引用。这些引用可能以某种方式被封装为BrowserSpriteSymbol
对象,使得它们可以直接在模板中使用<use>
元素进行引用。 -
在模板中使用
<use>
引用: 有了 SVG Sprite 和相应的<symbol>
定义,你就可以在模板中使用<use>
元素来引用这些<symbol>
。<use>
元素的xlink:href
或href
属性应该指向 SVG Sprite 中<symbol>
的id
。 - 即直接使用<svg> <use :xlink:href="symbolId" /> </svg> 加载svg图片