在react中使用svg的各种方法总结(附代码)

这篇文章给大家介绍的内容是关于在react中使用svg的各种方法总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

优势

  • SVG可被非常多的工具读取和修改(比如vscode)

  • 不失真, 放大缩小图像都很清晰

  • SVG文件是纯粹的XML, 也是一种DOM结构

  • 使用方便, 设计软件可以直接导出

兼容性

上一张兼容性图表, 或到caniuse.com查看

兼容性也不是什么大问题. 当然, 如果你的网站还是需要兼容这些旧式的浏览器, 社区上也有对应的方案, 比如张鑫旭的一些SVG向下兼容优雅降级技术

使用方式

方案多种多样, 适合你的需求的才是最优的

直接在模板中使用

const Home = () => (
    <div>
        <svg width={300} height={300}>
            <rect width=100% height=100% style={{ fill: 'purple', strokeWidth: 1, stroke: 'rgb(0,0,0)' }} />
        </svg>
    </div>
)
  1. 如果每个svg要前端画, 对前端要求较高.

  2. 如果每个图标从设计师给的svg代码里面拷, 要改各种标签不说, 改错了还报错

这样的方式并不友好

把svg转成字体

iconfont

直接把代码复制到项目css中, 定制你的标签样式, 参考阿里官方的文章, 使用起来简单粗暴, 而且浏览器兼容性高. 但是需要手动上传(有其他方案欢迎补充), 另外如果要部署到阿里的cdn以外的环境需要先下载下来, 再上传到目标环境. 略显麻烦.

此外还有icomoon等等都有提供类似的解决方案

把svg转成react component

请注意: 以下会包含typescript相关的配置

项目构建前转换

例:

typescript-react-svg-icon-generator, 需要我们有一条前置命令去把svg做转换.

// svg-generator.js

const generator = require('typescript-react-svg-icon-generator')

const config = {
    svgDir: './svg/',
    destination: './Icon/index.tsx'
}
generator(config)
$ node ./svg-generator.js

使用:

import Icon from './Icon'
export default class App extends Component {
    render() {
        return <Icon kind='close' color='#748' width={500} height={100} />
    }
}

此外, svgr(下面提到的)同样提供这种方案, 请自行查阅

项目构建时转换

例:

@svgr/webpack

嗯. 没错, 这是一个webpack loader.

// webpack rules config
{
    test: /\.svg$/,
    loader: '@svgr/webpack'
}
// 全局声明svg component定义
declare interface SvgrComponent extends React.StatelessComponent<React.SVGAttributes<SVGElement>> {}

declare module '*.svg' {
    const content: SvgrComponent
    export default content
}
import IconReact from '@assets/svg/react.svg'

const Home = () => (
    <p>
        <IconReact width={180} height={180} color=purple />
    </p>
)

这个方案好处不仅体现在构建时转换, 更重要的是它完全继承了SVGAttributes, 不需要额外的学习成本! 可参考项目ts-react-webpack4, 或脚手架steamer-react-ts

此外, 还有react-svg, svg-react-loader等同样是以类似的方式实现的.

相关文章推荐:

svg path路径的作用:svg path在网页开发中的使用方法

Storage Event如何实现页面间通信

以上就是在react中使用svg的各种方法总结(附代码)的详细内容,更多请关注双恒网络其它相关文章!

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

云资源网 » 在react中使用svg的各种方法总结(附代码)

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
你们有qq群吗怎么加入?
当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群https://www.sudo1.com/page-qun.html。
  • 会员数(个)
  • 12334资源数(个)
  •        
  • 资源(G)
  •        
  • 今日下载
  • 1405稳定运行(天)

提供最优质的资源集合

立即查看 了解详情