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

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

优势

4216fea02651c83897a817b0023d2bb7.pngSVG可被非常多的工具读取和修改(比如vscode)

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

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

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

兼容性

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

15e1c6bfe0bc90752efadae79f73ce57.png

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

使用方式

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

直接在模板中使用const Home = () => (

)如果每个svg要前端画, 对前端要求较高.

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

这样的方式并不友好

把svg转成字体

iconfont

0af2e9217d6b80d635e9b18b83977509.png

直接把代码复制到项目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

}

}

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

项目构建时转换

例:

@svgr/webpack

嗯. 没错, 这是一个webpack loader.// webpack rules config

{

test: /\.svg$/,

loader: '@svgr/webpack'

}// 全局声明svg component定义

declare interface SvgrComponent extends React.StatelessComponent> {}

declare module '*.svg' {

const content: SvgrComponent

export default content

}import IconReact from '@assets/svg/react.svg'

const Home = () => (

)

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

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

相关文章推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值