Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用webpack在我的React组件中直接加载SVG?

如何使用webpack在我的React组件中直接加载SVG?
EN

Stack Overflow用户
提问于 2015-06-15 11:42:08
回答 1查看 11.4K关注 0票数 11

我想使用webpack在我的NextButton组件中直接呈现一个材质设计图标。以下是我的代码的相关部分:

代码语言:javascript
运行
AI代码解释
复制
var NextIcon = require('material-design-icons/navigation/svg/production/ic_chevron_right_18px.svg');

var NextButton = React.createClass({
  render: function() {
    return (
      <Link to={this.props.target} className='button--next'>
        {this.props.label} {NextIcon}
      </Link>
    )
  }
});

但这并没有像我想象的那样工作。它似乎将svg输出为字符串,而不是元素。

我尝试过使用raw-loaderimg-loaderurl-loaderfile-loadersvg-loader,但我找不到正确的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 12:31:53

由于您的SVG内容存储为字符串而不是React元素,因此需要使用Dangerously Set innerHTML

代码语言:javascript
运行
AI代码解释
复制
var NextIcon = require('material-design-icons/navigation/svg/production/ic_chevron_right_18px.svg');

var NextButton = React.createClass({
  render: function() {
    return (
      <Link to={this.props.target} className='button--next'>
        {this.props.label} <span dangerouslySetInnerHTML={{ __html: NextIcon }} />
      </Link>
    )
  }
});

您也许可以通过创建一个webpack加载器来解决这个问题,该加载器在您需要SVG文件时自动为您执行此操作。

dangerouslySetInnerHTML.loader.js

代码语言:javascript
运行
AI代码解释
复制
module.exports = function(content) {
    return (
        'module.exports = require("react").createElement("span", {' +
            'dangerouslySetInnerHTML: {' +
                '__html: ' + JSON.stringify(content) +
            '}' +
        '});'
    );
};

webpack.config.js

代码语言:javascript
运行
AI代码解释
复制
loaders: [
  {
    test: /\.svg$/,
    loader: require.resolve('./dangerouslySetInnerHTML.loader'),
    exclude: /node_modules/,
  },
],

前面的代码片段将变成:

代码语言:javascript
运行
AI代码解释
复制
var NextIcon = require('material-design-icons/navigation/svg/production/ic_chevron_right_18px.svg');

var NextButton = React.createClass({
  render: function() {
    return (
      <Link to={this.props.target} className='button--next'>
        {this.props.label} {NextIcon}
      </Link>
    )
  }
});
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30844298

复制
相关文章
Webpack实战-加载SVG
SVG 作为矢量图的一种标准格式,已经得到了各大浏览器的支持,它也成为了 Web 中矢量图的代名词。 在网页中采用 SVG 代替位图有如下好处:
IMWeb前端团队
2019/12/03
2.3K0
Webpack插件按需加载组件_webpack懒加载
学习Vue的时候,各类教程都会告诉我们:Vue 的特点是SPA——Single Page Application(单页应用程序)。它有着诸如:“只有第一次会加载页面, 以后的每次页面切换,只需要进行组件替换;减少了请求体积,加快页面响应速度,降低了对服务器的压力” 等等优点。
全栈程序员站长
2022/11/08
1.5K0
Webpack插件按需加载组件_webpack懒加载
如何在react中使用svg icons
首先,react是支持svg,所以使用svg是没有问题的,但是到目前为止(版本为v15.3.0)还不支持svg的use标签,所以打算使用svg symbol还是趁早放弃,以下为官方的svg支持标签:
IMWeb前端团队
2019/12/04
1.5K0
如何在react中使用svg icons
如何在react中使用svg icons
该文介绍了如何在React组件中使用SVG图标。首先介绍了传统的使用方式,然后介绍了使用React组件的方式,最后通过一个名为`Mic`的组件示例展示了如何将SVG图标转换为React组件。通过使用Fis3插件,可以自动将SVG转换为React组件,从而简化了React项目中使用SVG的过程。
IMWeb前端团队
2017/12/29
2.8K0
如何在react中使用svg icons
关于在reactjs项目中如何用webpack配置组件按需加载
在使用 import {Button} from 'antd' 的时候 打开控制台,会出现这样的警告 You are using a whole package of antd, please use https://www.npmjs.com/package/babel-plugin-import to reduce app bundle size. 实际我们在用antd的时候,只需要一个Button组件,它给完全加载进项目了,要知道antd 8W多行代码,执行完之后得花一些时间吧. 于是官方就提供了下面
杭州前端工程师
2018/06/15
9490
网页中如何使用SVG
① 如果文件中的根元素 带有明确的 height 和 width 属性,则它们会被用作文件的固有尺寸; ② 如果只指定 height 或者 width ,并且 带有 viewBox 属性,那么将用 viewBox 计算宽高比,图像会被缩放已匹配指定的尺寸; ③ 如果 带有 viewBox 属性而没有尺寸,则 viewBox 的 height 和 width 将被视为像素长度。 ④ 没有如何尺寸,浏览器应该为嵌入内容应用默认 HTML 尺寸,通常是 150 像素高,300 像素宽。
奋飛
2021/08/31
1.9K0
网页中如何使用SVG
网页中如何使用SVG
① 如果文件中的根元素 <svg> 带有明确的 height 和 width 属性,则它们会被用作文件的固有尺寸; ② 如果只指定 height 或者 width ,并且 <svg> 带有 viewBox 属性,那么将用 viewBox 计算宽高比,图像会被缩放已匹配指定的尺寸; ③ 如果<svg> 带有 viewBox 属性而没有尺寸,则 viewBox 的 height 和 width 将被视为像素长度。 ④ 没有如何尺寸,浏览器应该为嵌入内容应用默认 HTML 尺寸,通常是 150 像素高,300 像素宽。
奋飛
2021/02/16
1.2K0
网页中如何使用SVG
一文详解如何在基于webpack5的react项目中使用svg
本文主要讨论基于webpack5+TypeScript的React项目(cra、craco底层本质都是使用webpack,所以同理)在2023年的今天是如何在项目中使用svg资源的。
w4ngzhen
2023/10/17
1K0
一文详解如何在基于webpack5的react项目中使用svg
Iconfont 还是不能上传,如何维护你的 Icon?
使用 iconfont 有很多优势,比如只需要加载一次,全部图标都可以设置字号大小,颜色、透明度等,可以随意变换字体的形态,并且图标是矢量的,不会随着字体大小的变化失真,得益于 iconfont.cn 提供的便利,大多情况下,我们不必上传自己的图标,只需要便捷的搜索,就可以将图标加入到自己的项目图标库中,但最近工作中却遇到了比较严重的问题。
狂奔滴小马
2022/09/16
1.4K0
Iconfont 还是不能上传,如何维护你的 Icon?
SVG 图标在React项目中的优化
官方文档:https://webpack.docschina.org/loaders/url-loader/
javascript.shop
2019/09/04
3.7K0
SVG 图标在React项目中的优化
在微信小程序中直接运行React组件
在研究跨端开发时,我的一个重要目标,是可以让react组件跑在微信小程序中。在这个过程中,我探索了微信小程序的架构,并且引发了很多思考。而作为跨端开发,实际上很难做到 write once,run anywhere,因为每个平台所提供的能力是不一样的,例如微信小程序提供了原生的能力,例如调起摄像头或其他需要原生环境支持的能力,在微信小程序中开发虽然也是在webview中开展,但是,却需要一些原生的思维。所以,要做到 write once 就必须有一些限制,这些限制注定了我们无法完全利用小程序的能力,仅仅只用到一些布局的能力而已。所以,奉劝各位,在做跨端开发时,要有个心理准备。但如果跳出跨端开发,我现在只开发小程序,那我能否用我熟悉的react来开发呢?甚至,能否用我开发的nautil框架来开发呢?答案是可以的,本文将带你一步一步实现自己的react小程序开发之路,帮助你在某些特定的场景下,完成react项目往小程序迁移的目标。
否子戈
2021/07/16
5.2K0
在微信小程序中直接运行React组件
在react中使用的数字滚动组件
调用setValue就会产生动画效果。在调用setValue时可以临时传递参数,如:
挥刀北上
2021/02/25
4.3K0
在react中使用的数字滚动组件
【腾讯云前端性能优化大赛】如何使用React 技术栈从 3000ms 到 600ms 过程
目前主流框架react、vue、argular等(还有很多),国内大多数在Vue/React中,argular也有,但似乎用的不多。Vue3.x针对性能,渲染机制等也是一个不错的选择,不过抉择根据你的实际情况来定,我此次选择的是react,原因有很多,就不一一赘述了。
White feathe
2022/01/02
1.5K0
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
接下来的几篇文章将围绕一些‘猎奇’场景,从原理颠覆对 React 的认识。每一个场景下背后都透漏出 React 原理,
用户6835371
2021/10/18
3.8K0
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
关于 defineAsyncComponent 延迟加载组件 在 vue3 中的使用总结
使用 vue 3 的 defineAsyncComponent 特性可以让我们延迟加载组件。这意味着它们仅在需要时从服务器加载。
前端达人
2021/09/08
6.7K0
基于webpack4+react 的js懒加载
此处主要介绍使用动态导入(通过模块中的内联函数调用来分离代码)的懒加载。这种动态代码拆分的方式是webpack提供并推荐选择的方式。其原理是使用符合 ECMAScript 提案 的 import() 语法 来实现动态导入。
shirley
2019/03/24
4.3K0
【油猴脚本】在 Iconfont 上直接复制 React component 代码
在上文中介绍了使用 iconfont 的缺点,以及使用 SVG 的优点,简单归纳为以下几点:
狂奔滴小马
2022/09/16
2.1K0
【油猴脚本】在 Iconfont 上直接复制 React component 代码
React v18.x 在 react-router v6 使用 lazy 动态加载组件实现
对于直接使用 React.lazy 来说,基本上是没有问题的,但是当在 ts 下,将导入的组件放到 router 的 elment 属性下会报错,一般为类型不匹配
SpiritLing
2022/09/07
4.8K0
【React】282- 在 React 组件中使用 Refs 指南
使用 React 时,我们的默认思维方式应该是 不会强制修改 DOM ,而是通过传入 props 重新渲染组件。但是,有些情况却无法避免修改 DOM 。
pingan8787
2019/07/25
3.3K0
如何用 esbuild 替换 Create React App 中的 Webpack
原文链接:https://devtails.xyz/how-to-replace-webpack-in-create-react-app-with-esbuild[1]
chuckQu
2022/08/19
2.8K0
如何用 esbuild 替换 Create React App 中的 Webpack

相似问题

Webpack & React ()不加载组件(异步)

11

动态加载svg作为react中的组件

111

在react中加载svg文件而不修改webpack

16

无法使用Webpack加载SVG

12

如何使用React组件在UI中显示svg图标(.svg文件)?

1524
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文