При создании приложений React.js эффективное управление значками SVG имеет решающее значение. SVG обеспечивает масштабируемость и гибкость, необходимые для адаптивного дизайна, но обработка их в больших проектах может оказаться затруднительной. Именно здесь на помощь приходит svg-path-constants — инструмент CLI, предназначенный для оптимизации рабочего процесса SVG путем преобразования путей SVG в константы многократного использования.
В предыдущей статье «Всестороннее сравнение вариантов управления значками SVG в проектах React.js» я обсуждал различные методы управления значками SVG, включая встроенные SVG, спрайты SVG и использование компонентов React для каждого значка. Хотя у каждого метода есть свои плюсы и минусы, остается одна проблема: обеспечить организованность и возможность повторного использования ваших путей SVG.
Использование констант для путей SVG обеспечивает небольшой размер пакета и быстрое время сборки.
svg-path-constants — это инструмент CLI, который помогает генерировать константы из файлов SVG, упрощая интеграцию и управление значками SVG в ваших проектах React. Он преобразует пути SVG в константы JS, поддерживает гибкие соглашения об именах и позволяет настраивать вывод.
Вы можете сразу начать использовать константы svg-path с помощью npx:
npx svg-path-constants@latest
Кроме того, вы можете установить его глобально или как зависимость от разработчика:
npm install -g svg-path-constants npm install --save-dev svg-path-constants
Предположим, у вас есть файлы SVG в src/assets/icons и вы хотите сгенерировать константы в src/comComponents/Icon/paths.js:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Пример вывода:
// src/components/Icon/paths.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Укажите другой формат именования, например PascalCase:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js -f PascalCase
Пример вывода:
// src/components/Icon/paths.js export const FolderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const FolderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Управляйте именованием и выводом файлов с помощью специального шаблона:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/{-2,-1}/{0}.js -t "{1,-3}"
Пример вывода:
// src/components/Icon/folder/icon1.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path // src/components/Icon/folder/icon2.js export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
svg-path-constants может преобразовывать атрибуты SVG, такие как непрозрачность, заливка-непрозрачность, обводка и заливка, в компоненты строки пути.
Сгенерированная константа пути:
export const myIcon = "o0.5 O0.8 fff000 F00ff00 M10 10 H 90 V 90 H 10 Z";
Эта функция позволяет хранить важную информацию о стиле непосредственно в строке пути, сохраняя компактное и информативное представление.
После того как вы сгенерировали константы пути SVG с помощью svg-path-constants, вы можете легко интегрировать их в свои компоненты React. Это не только сохраняет ваш код чистым, но и позволяет легко повторно использовать пути SVG в вашем приложении.
Предположим, вы уже выполнили следующую команду для создания констант из файлов SVG:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Эта команда создает файл src/comComponents/Icon/paths.js с такими константами, как:
// src/components/Icon/paths.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Теперь давайте создадим компонент React, который отображает эти SVG-значки с использованием сгенерированных констант.
import React from 'react'; import { folderIcon1, folderIcon2 } from './paths'; // Import the generated SVG path constants const parsePathData = (d) => { const pathElements = []; const pathCommands = d.split(/(o[\d.] |O[\d.] |f[0-9a-fA-F] |F[0-9a-fA-F] )/); // Split by style commands let attributes = null; pathCommands.forEach((text, i) => { const isCommand = Boolean(i % 2); if (isCommand) { if (!attributes) { attributes = {}; } const match = text.match(/^(o([\d.] ))?(O([\d.] ))?(f([0-9a-fA-F] ))?(F([0-9a-fA-F] ))?$/); const [, , opacity, , fillOpacity, , stroke, , fill] = match; if (opacity) attributes.opacity = opacity; if (fillOpacity) attributes["fill-opacity"] = fillOpacity; if (stroke) attributes.stroke = `#${stroke}`; if (fill) attributes.fill = `#${fill}`; return; } if (text.trim().length) { pathElements.push({ ...attributes, d: text }); } }); return pathElements; }; const SvgIcon = ({ d, size = 24, color = 'currentColor', ...props }) => { const pathElements = parsePathData(d); return ( ); }; const IconDemo = () => (); export default IconDemo;SVG Icon Examples
Folder Icon 1
Folder Icon 2
Теперь вы можете использовать компонент IconDemo в любом месте вашего приложения React для отображения значков SVG:
import React from 'react'; import ReactDOM from 'react-dom'; import IconDemo from './components/Icon/IconDemo'; ReactDOM.render(, document.getElementById('root') );
Функция parsePathData:
Компонент SvgIcon:
Компонент IconDemo:
Сейчас я работаю над библиотекой npm, которая улучшит константы svg-path за счет добавления растровых изображений (PNG) в качестве комментариев над каждой сгенерированной константой. Это обеспечит визуальное представление значка непосредственно в вашем коде, что упростит идентификацию путей SVG и управление ими.
Управление путями SVG в проектах React не должно быть проблемой. С помощью svg-path-constant вы можете поддерживать порядок в своих значках, чистоту кода и эффективность рабочего процесса. И вскоре, с появлением новой библиотеки для добавления растровых изображений в комментарии к значкам, у вас появится еще более наглядный и интуитивно понятный способ управления вашими SVG-ресурсами.
Попробуйте svg-path-constants сегодня:
npx svg-path-constants@latest
И следите за обновлениями!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3