使用 Next.js 时如何导入 SVG 图标?

阅读时长 5 分钟读完

作为一名前端开发人员,我们经常需要使用 SVG 图标来装饰我们的网站和应用程序。如果你在一个使用 React 的项目中工作,那么你可能已经知道如何使用 SVG 图标了。但是,如果你使用 Next.js,那么你需要知道一些额外的步骤来导入 SVG 图标。在本篇文章中,我们将讨论 Next.js 中如何导入 SVG 图标。

为什么在 Next.js 中导入 SVG 图标会有所不同?

在一个传统的 React 项目中,你可以使用一个名为 url-loader 的 webpack 加载器来导入 SVG 图标。url-loader 将 SVG 格式的图标转换成一个 base64 字符串,然后将其嵌入到生成的 JavaScript 文件中。这样一来,你就可以使用像这样的代码来渲染 SVG 图标:

-- -------------------- ---- -------
------ ----- ---- --------
------ ---- ---- -------------

-------- ------------- -
  ------ -
    -----
      ---------- -----------
      ----- --
    ------
  --
-

但是,在 Next.js 中,你不能像这样使用 url-loader。因为 Next.js 在构建时会生成静态 HTML 文件,它不会像传统的 React 项目那样使用 JavaScript 来渲染页面。因此,在 Next.js 中,你需要使用一个名为 @svgr/webpack 的 webpack 加载器来导入 SVG 图标。@svgr/webpack 将 SVG 格式的图标转换成一个 React 组件,你可以直接在你的代码中使用这个组件来渲染 SVG 图标。

如何在 Next.js 中导入 SVG 图标?

在 Next.js 中导入 SVG 图标的过程非常简单。首先,你需要安装两个 npm 依赖项:@svgr/webpackfile-loader。你可以使用以下命令在你的 Next.js 项目中安装这些依赖项:

安装完成后,你需要在 Next.js 的 webpack 配置文件中添加以下代码:

-- -------------------- ---- -------
-------------- - -
  --------------- -
    --------------------------
      ----- ---------
      ---- ----------------
    ---

    ------ -------
  --
--

这段代码会将 .svg 文件交给 @svgr/webpack 加载器来处理。在处理过程中,@svgr/webpack 将 SVG 格式的图标转换成一个 React 组件,并将其输出到一个 JavaScript 文件中。之后,你可以在你的 Next.js 代码中像这样导入 SVG 图标:

-- -------------------- ---- -------
------ ----- ---- --------
------ - -------------- -- ---- - ---- -------------

-------- ------------- -
  ------ -
    -----
      ---------- -----------
      ----- --
    ------
  --
-

注意,我们使用了 ReactComponent 这个命名导出。这个命名导出是由 @svgr/webpack 自动生成的,它指向了转换后的 React 组件。这样一来,你就可以直接在你的代码中使用这个组件来渲染 SVG 图标了。

将 SVG 图标作为组件库导出

如果你正在开发一个面向组件的项目,那么你可能会想将一系列 SVG 图标都作为一个组件库导出。为了实现这个目的,你可以创建一个名为 icons.js 的文件,并在其中导入和重新导出所有的 SVG 图标。以下是一个示例 icons.js 文件:

之后,你可以将 icons.js 文件作为一个组件库来导入,并将其包含在你的 Next.js 代码中。以下是一个示例 MyComponent 组件,它使用了从 icons.js 中导入的 SVG 图标:

-- -------------------- ---- -------
-- --------------

------ ----- ---- --------
------ - -- ----- ---- ----------

-------- ------------- -
  ------ -
    -----
      ---------- -----------
      ------------ --
      ------------ --
      ------------ --
      --- --- -------- --- -- ---
    ------
  --
-

------ ------- ------------

总结

在本篇文章中,我们讨论了如何在 Next.js 中导入 SVG 图标。由于 Next.js 的构建方式与传统的 React 项目不同,你需要使用 @svgr/webpack 加载器来将 SVG 图标转换为 React 组件。在你的代码中,你可以使用 ReactComponent 命名导出来引用转换后的 React 组件。我们还讨论了如何将一系列 SVG 图标作为一个组件库导出,以便在你的 Next.js 项目中重复使用它们。我希望这篇文章能够帮助你更好地理解如何在 Next.js 中导入 SVG 图标,以及如何将它们作为一个组件库重复使用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b14e3048841e9894da1772

纠错
反馈