Вот небольшой совет по использованию SVG в React. Разметка SVG должна быть JSX-совместимой, то есть такие свойства SVG, как fill-opacity
, необходимо преобразовать в fillOpacity
и т. Д. Обновлять их вручную сложно, поэтому вот простой рабочий процесс:
Шаг 1. Используйте SVGOMG для оптимизации SVG
Когда вы берете ресурс SVG прямо из Sketch, это ужасно неэффективно. Вы можете вставить разметку или импортировать файл прямо в SVGOMG, бесплатный инструмент, который обычно сокращает 40% размера файла, а также создает более чистый код. Переключите представление разметки / кода, скопируйте вывод SVG и перейдите к шагу 2.
Шаг 2. Используйте svg2jsx, чтобы преобразовать SVG в действительный код React JSX
Этот бесплатный инструмент позволяет вставлять обычную разметку SVG прямо в редактор и мгновенно выводить действительный JSX. Он берет все надоедливые реквизиты, такие как fill-opacity
, и конвертирует их в их JSX-аналог fillOpacity
.
Вот и все, теперь возьмите этот вывод и поместите его в компонент React. Я не слишком много работаю с SVG, поэтому не проверял, есть ли конвертер / оптимизатор, встроенный в редактор Atom.
Вот краткий пример простого значка поиска в Sketch:
Исходный вывод SVG из Sketch:
<?xml version="1.0" encoding="UTF-8"?> <svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch --> <title>Group 2</title> <desc>Created with Sketch.</desc> <defs></defs> <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"> <g id="Nav-Bar" transform="translate(-19.000000, -315.000000)" stroke="#333333"> <g id="Group-2" transform="translate(20.000000, 316.000000)"> <circle id="Oval" cx="5.56521739" cy="6.06086957" r="5.56521739"></circle> <path d="M9,10.4956522 L15.5043478,17" id="Shape"></path> </g> </g> </g> </svg>
Оптимизированная разметка SVG из SVGOMG ( 465 байт → 226 байт 48,6%)
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
<g fill="none" fill-rule="evenodd" stroke="#333" stroke-linecap="round" stroke-linejoin="round" transform="translate(1 1)">
<circle cx="5.565217" cy="6.06087" r="5.565217"/>
<path d="M9 10.495652L15.504348 17"/>
</g>
</svg>
SVG преобразован в JSX с помощью svg2jsx
<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18'> <g fill='none' fillRule='evenodd' stroke='#333' strokeLinecap='round' strokeLinejoin='round' transform='translate(1 1)'> <circle cx='5.565' cy='6.061' r='5.565' /> <path d='M9 10.495652L15.504348 17' /> </g> </svg>