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

SVG у компонент JSX

Перетворіть сиру розмітку SVG на готовий до використання компонент React з атрибутами в camelCase, поширенням пропсів та опційними currentColor і forwardRef.

— результат з’явиться тут —

Про цей інструмент

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

Кожен атрибут SVG з дефісом чи простором імен перетворюється на camelCase на його назву в React — stroke-width на strokeWidth, fill-rule на fillRule, clip-path на clipPath, stop-color на stopColor, xlink:href на xlinkHref, xmlns:xlink на xmlnsXlink — тоді як атрибути data-* і aria-* лишаються як є. Рядки інлайн-стилів стають об'єктами стилів, порожні елементи на кшталт 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?
Атрибути з дефісами та просторами імен через двокрапку перетворюються на camelCase на їхні еквіваленти в React: stroke-width на strokeWidth, fill-rule на fillRule, xlink:href на xlinkHref. Атрибути data-* і aria-* зберігаються. Інлайн-стилі стають об'єктами стилів.
Що робить опція 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 опускає анотації типів, але в іншому ідентичний.

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