تحويل SVG إلى مكوّنات React Native — Numio
يحوّل ترميز SVG إلى مكوّن React Native يستورد Svg وPath وG وعناصر أخرى من react-native-svg. يعمل تحسين SVGO أولًا، ثم تصبح السمات خصائص JSX، والقيم الرقمية أرقامًا (strokeWidth={2}).
تحويل أيقونة مُصدَّرة من Figma أو Sketch إلى مكوّن لتطبيق Expo أو React Native يستخدم react-native-svg.
متى تستخدمها
- تحويل أيقونة مُصدَّرة من Figma أو Sketch إلى مكوّن لتطبيق Expo أو React Native يستخدم react-native-svg.
- تقليص ملف SVG متضخم (عناوين، بيانات وصفية من المحرر، defs غير مستخدمة) قبل شحنه كمكوّن أصلي.
طريقة الاستخدام
- الصق ترميز SVG في محرر SVG أو أفلت ملف .svg؛ يجب أن يكون الإدخال SVG صالحًا وإلا ظهرت الرسالة "This is not a valid svg code."
- افتح SVGO Settings لإيقاف التحسين أو تبديل إضافات منفردة مثل remove title أو remove view box أو merge paths؛ وتقارن المعاينة أسفل المحرر بين SVG الأصلي والمحسَّن.
- انسخ مخرجات لوحة React Native إلى ملف .js أو .tsx وثبّت react-native-svg في تطبيقك.
ترميز SVG
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<title>Check</title>
<g fill="none" stroke="#16a34a" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<path d="M7 12.5l3 3 7-7"/>
</g>
</svg>مكوّن React Native (react-native-svg)
import * as React from "react"
import Svg, { G, Circle, Path } from "react-native-svg"
const SvgComponent = (props) => (
<Svg
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
{...props}
>
<G fill="none" stroke="#16a34a" strokeWidth={2}>
<Circle cx={12} cy={12} r={10} />
<Path d="m7 12.5 3 3 7-7" />
</G>
</Svg>
)
export default SvgComponentالتفاصيل والقيود
يعمل تحسين SVGO في Web Worker داخل متصفحك، لكن توليد JSX يجري على الخادم: يُرسَل SVG المحسَّن إلى /api/svg-to-jsx، الذي يشغّل SVGR مع native: true.
تُحذف العناصر التي لا يدعمها react-native-svg، ويضيف SVGR تعليقًا مثل /* SVGR has dropped some elements not supported by react-native-svg: filter */.
يضمّن SVGO قواعد <style> داخل العناصر ثم يحوّل تصريحات style إلى سمات، فيصبح style="stroke:blue" هو stroke="#00f" (الخاصية stroke). ويُحذف <title> افتراضيًا.
تُحفظ width وheight وviewBox، ويُنشر {...props} على عنصر Svg الجذري لتتمكن من تجاوز الحجم أو اللون.
FAQ
هل تحتاج المخرجات إلى react-native-svg؟
نعم. يستورد المكوّن Svg ومكوّنات العناصر مثل Path وCircle وG من react-native-svg، الذي يجب تثبيته في مشروعك؛ ولا يعمل مع عناصر View العادية في React Native.
هل يمكنني إبقاء viewBox لكي تتدرج الأيقونة؟
نعم. الإضافة remove view box موقفة افتراضيًا، لذا يبقى viewBox على عنصر Svg. مرّر خاصيتي width وheight عند استخدام المكوّن لتغيير حجمه.
ماذا يحدث للمرشحات والتدرجات اللونية؟
تُحذف العناصر التي لا مقابل لها في react-native-svg، مثل filter، مع تعليق في أعلى الملف. وتُزال التدرجات غير المستخدمة بواسطة remove useless defs في SVGO.
هل يُرفع ملف SVG الخاص بي؟
يُرسَل SVG المحسَّن إلى نقطة النهاية /api/svg-to-jsx الخاصة بالصفحة لتوليد المكوّن؛ أما خطوة التحسين والمعاينة فتبقيان في متصفحك.