UTILS.
100% в браузере
🎨

SVG в JSX-компонент

Превратите сырую разметку SVG в готовый React-компонент с атрибутами в camelCase, пробросом пропсов и опциональными currentColor и forwardRef.

— результат появится здесь —

Об этом инструменте

Инструмент SVG в JSX-компонент преобразует сырую разметку SVG в чистый React-компонент, как это делает SVGR, но целиком в вашем браузере, без загрузки на сервер. Вставьте иконку, экспортированную из дизайн-инструмента, и получите компонент, который можно импортировать и стилизовать. Он разбирает SVG через DOMParser и сообщает понятную ошибку, если разметка некорректна.

Каждый дефисный или пространственно-именованный атрибут SVG приводится к своему имени в React — stroke-width в strokeWidth, fill-rule в fillRule, clip-path в clipPath, stop-color в stopColor, xlink:href в xlinkHref, xmlns:xlink в xmlnsXlink — тогда как атрибуты data-* и aria-* остаются как есть. Инлайн-строки стилей становятся объектами style, пустые элементы вроде path и circle самозакрываются, а пропсы пробрасываются на корневой <svg {...props}>, чтобы компонент оставался настраиваемым. Опциональные переключатели позволяют заменить жёстко заданные значения fill и stroke на currentColor (чтобы иконка наследовала цвет текста), убрать width и height, чтобы она масштабировалась под свой контейнер, и обернуть компонент в forwardRef, чтобы открыть доступ к нижележащему узлу <svg>.

Выберите вывод на JavaScript или TypeScript: вариант TypeScript типизирует пропсы как React.SVGProps<SVGSVGElement>, а при включённом forwardRef использует forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. Компонент выдаётся как экспортируемая стрелочная функция (export const Icon = (props) => (...)) с выбранным вами именем и отступом, готовая к вставке в модуль иконок.

Часто задаваемые вопросы

Как преобразуются атрибуты SVG?
Дефисные и двоеточие-именованные атрибуты приводятся к своим эквивалентам в React: stroke-width в strokeWidth, fill-rule в fillRule, xlink:href в xlinkHref. Атрибуты data-* и aria-* сохраняются. Инлайн-стили становятся объектами style.
Что делает опция currentColor?
Она заменяет жёстко заданные значения цвета fill и stroke (кроме none) на "currentColor", так что SVG наследует окружающий цвет текста и может быть перекрашен обычным CSS color на родителе.
Зачем пробрасывать пропсы на svg?
Проброс {...props} на корневой <svg> позволяет вызывающим передавать className, width, onClick, aria-метки и любые другие пропсы SVG компоненту. При включённом forwardRef ref также пробрасывается на нижележащий элемент.
В чём разница между выводом JS и TS?
Вывод TypeScript типизирует пропсы как React.SVGProps<SVGSVGElement>, а с forwardRef использует forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. Вывод JavaScript опускает аннотации типов, но в остальном идентичен.

Больше инструментов