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


本文摘自PHP中文网,作者不言,侵删。

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

优势

3912629915-5b56c25a441ee_articlex.png

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

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

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

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

兼容性

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

1873861957-5b56c25a03398_articlex.png

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

使用方式

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

直接在模板中使用

1

2

3

4

5

6

7

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

535306852-5b56c25a04326_articlex.png

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

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

把svg转成react component

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

项目构建前转换

例:

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

1

2

3

4

5

6

7

8

9

// svg-generator.js

 

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

 

const config = {

    svgDir: './svg/',

    destination: './Icon/index.tsx'

}

generator(config)

1

$ node ./svg-generator.js

使用:

1

2

3

4

5

6

import Icon from './Icon'

export default class App extends Component {

    render() {

        return <Icon kind='close' color='#748' width={500} height={100} />

    }

}

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

阅读剩余部分

相关阅读 >>

聊聊typescript中enum(枚举)的用法

export和export default中的知识点介绍(附示例)

typescript 构建工具整合

浅谈网页中提升svg文件可访问性的几种方法

htnl5利用svg页面高斯模糊的方法

html5中的canvas 和 svg分别是什么?它们的区别在何处?(实例)

typescript 高级类型

svg标签:<text >标签和<tspan>标签的应用(代码)

typescript 模块

svg如何实现坐标系统变换(附代码)

更多相关阅读请进入《react.js》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...