Powrót do bloga

Przewodnik po importowaniu SVG w React Native: react-native-svg + SvgXml

Poznaj dwa praktyczne sposoby używania SVG w React Native z react-native-svg: import przez transformer i dynamiczne renderowanie przez SvgXml.

26 sty 2026React NativeSVGreact-native-svgRozwój mobilnyIntegracja SVGreact-native-svg-transformer

Przewodnik po importowaniu SVG w React Native: react-native-svg + SvgXml

SVG (Scalable Vector Graphics) stał się niezbędnym formatem zasobów graficznych w programowaniu React Native. W porównaniu do tradycyjnych formatów bitmap (PNG, JPG), SVG oferuje bezstratne skalowanie, mniejsze rozmiary plików i bardziej elastyczną kontrolę stylu. Artykuł ten zawiera szczegółowe wprowadzenie do dwóch głównych metod importowania i używania plików SVG w projektach React Native, wraz z pełnymi przykładami kodu i zaleceniami dotyczącymi optymalizacji wydajności.

Dlaczego warto używać SVG w React Native

SVG (Scalable Vector Graphics) zapewnia kilka kluczowych korzyści w tworzeniu aplikacji mobilnych:

  • Doskonałe skalowanie: Grafika pozostaje wyraźna niezależnie od rozmiaru i rozdzielczości ekranu
  • Mniejszy rozmiar pliku: pliki SVG są zazwyczaj lżejsze niż wiele zestawów zasobów PNG
  • Dynamiczna stylizacja: Kolory, rozmiary i inne atrybuty można dynamicznie modyfikować za pomocą rekwizytów
  • Spójność: Renderuje identycznie na platformach iOS i Android

Główna zależność: react-native-svg

Pierwszym krokiem do pracy z SVG w React Native jest instalacja biblioteki react-native-svg, która pozwala natywnie renderować pliki SVG w aplikacji.

npm install react-native-svg
# or
yarn add react-native-svg

Uwaga: w przypadku React Native 0.60 i nowszych, łączenie jest zwykle automatyczne. W przypadku wcześniejszych wersji może być konieczne ręczne połączenie modułów natywnych.

Metoda 1: użycie react-native-svg-transformer

Jest to najbardziej zalecane podejście, umożliwiające bezpośredni import plików SVG jako komponentów, tak jak w projektach webowych React.

Instalacja i konfiguracja

Najpierw zainstaluj transformator:

npm install --save-dev react-native-svg-transformer
# or
yarn add --dev react-native-svg-transformer

Następnie utwórz lub zmodyfikuj metro.config.js w katalogu głównym projektu:

const { getDefaultConfig } = require("metro-config");

module.exports = (async () => {
  const {
    resolver: { sourceExts, assetExts },
  } = await getDefaultConfig();

  return {
    transformer: {
      babelTransformerPath: require.resolve("react-native-svg-transformer"),
    },
    resolver: {
      assetExts: assetExts.filter((ext) => ext !== "svg"),
      sourceExts: [...sourceExts, "svg"],
    },
  };
})();

Przykład użycia

Po konfiguracji możesz bezpośrednio importować pliki SVG:

import React from "react";
import { View } from "react-native";
import Logo from "./assets/logo.svg";

const MyComponent = () => (
  <View>
    <Logo width={100} height={100} fill="#3B82F6" />
  </View>
);

export default MyComponent;

Ta metoda pozwala traktować pliki SVG jak zwykłe komponenty React Native, co ułatwia ich importowanie i używanie w całej aplikacji.

Zalety:

  • Bezpieczny typ i doskonałe doświadczenie programistyczne
  • Obsługuje dynamiczną kontrolę stylu za pomocą rekwizytów
  • Doskonała wydajność dzięki transformacji w czasie kompilacji

Przypadki użycia: Biblioteki ikon statycznych, środki trwałe w systemach projektowych

Metoda 2: Używanie SvgXml do dynamicznego ładowania

Komponent SvgXml z React-native-svg umożliwia renderowanie plików SVG z ciągów XML, zapewniając większą elastyczność w scenariuszach dynamicznych.

Podstawowe użycie

import React from "react";
import { SvgXml } from "react-native-svg";

const svgMarkup = `
  <svg width="100" height="100" viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="#10B981" />
  </svg>
`;

const DynamicIcon = () => <SvgXml xml={svgMarkup} width="100%" height="100%" />;

export default DynamicIcon;

Dynamiczne ładowanie z plików

SvgXml jest szczególnie przydatny, gdy trzeba załadować pliki SVG z systemu plików lub sieci:

import React, { useState, useEffect } from "react";
import { SvgXml } from "react-native-svg";
import RNFS from "react-native-fs";

const LoadableSvg = ({ filePath }) => {
  const [xml, setXml] = useState("");

  useEffect(() => {
    async function loadSvg() {
      try {
        const svgContent = await RNFS.readFile(filePath);
        setXml(svgContent);
      } catch (error) {
        console.error("Error loading SVG file", error);
      }
    }
    loadSvg();
  }, [filePath]);

  return xml ? <SvgXml xml={xml} width="100%" height="100%" /> : null;
};

Zalety: — Obsługuje dynamiczne ładowanie w czasie wykonywania

  • Może pobierać pliki SVG z interfejsów API lub serwerów zdalnych
  • Elastyczna obsługa treści generowanych przez użytkowników

Rozważania: Może powodować problemy z wydajnością podczas wielokrotnego renderowania złożonych lub dynamicznych plików SVG, ponieważ analizuje XML w czasie wykonywania.

Przechowywanie i organizacja plików SVG

W projektach React Native zazwyczaj przechowujesz pliki SVG w folderze zasobów w strukturze projektu, a następnie importujesz je jak inne zasoby.

Zalecana struktura katalogów:

źródło/
aktywa/
ikony/
strzałka w lewo.svg
strzałka w prawo.svg
logo/
brand-primary.svg
brand-wtórny.svg
komponenty/
ikona.tsx

Podgląd i weryfikacja w przeglądarce SVG

Przed zintegrowaniem plików SVG z projektem React Native warto podejrzeć je i sprawdzić w SVG Viewer:

  1. Sprawdź viewBox: Upewnij się, że viewBox jest poprawnie ustawiony, aby uniknąć problemów z przycinaniem i skalowaniem
  2. Wyczyść nadmiarowy kod: Usuń metadane i atrybuty edytora dodane przez narzędzia projektowe
  3. Sprawdź ścieżki: Potwierdź, że dane ścieżki są kompletne i zoptymalizowane
  4. Skalowanie testowe: Podgląd w różnych rozmiarach, aby upewnić się, że efekty wizualne spełniają oczekiwania

Korzystanie z przeglądarki SVG pomaga wykryć problemy podczas programowania, oszczędzając czas na debugowaniu na urządzeniach mobilnych.

Optymalizacja plików SVG w celu uzyskania lepszej wydajności

Podczas korzystania z plików SVG w React Native optymalizacja plików jest szczególnie ważna:

  1. Uprość ścieżki: Użyj narzędzi takich jak Optymalizator SVG lub SVGO, aby zmniejszyć punkty ścieżki
  2. Usuń nieużywane elementy: Usuń ukryte warstwy i puste grupy
  3. Scal zduplikowane style: Wyodrębnij powtarzające się atrybuty do wspólnych stylów
  4. Precyzja sterowania: Zachowaj współrzędne ścieżki z dokładnością do 2-3 miejsc po przecinku

Zoptymalizowane pliki SVG nie tylko ładują się szybciej, ale także lepiej renderują, szczególnie w scenariuszach wymagających dużej częstotliwości, takich jak przewijanie listy.

Praktyczne zalecenia

Oto kilka praktycznych wskazówek, bazujących na rzeczywistych doświadczeniach projektowych:

  1. Ujednolicona konwencja nazewnictwa: Ustal jasne konwencje nazewnictwa dla plików SVG, takie jak icon-home.svg, logo-brand.svg
  2. Enkapsuluj wspólne komponenty: Utwórz komponent Icon, aby centralnie zarządzać wszystkimi importami i wykorzystaniem ikon
  3. Definicje typów: Dodaj definicje typów TypeScript do komponentów SVG, aby zapewnić lepsze środowisko programistyczne
  4. Strategia leniwego ładowania: W przypadku dużych zestawów ikon rozważ ładowanie na żądanie, zamiast łączyć wszystko w pakiety

Streszczenie

Istnieje wiele sposobów wykorzystania SVG w React Native, a wybór właściwej metody zależy od konkretnego scenariusza:

  • Biblioteki ikon statycznych: Użyj React-Native-SVG-Transformer, aby uzyskać najlepszą jakość programowania
  • Treść dynamiczna: Użyj SvgXml do ładowania i przetwarzania w czasie wykonywania
  • Scenariusze krytyczne dla wydajności: Optymalizuj z wyprzedzeniem pliki SVG i kontroluj złożoność

Niezależnie od wybranej metody, zaleca się wcześniejsze sprawdzenie jakości pliku w przeglądarce SVG, aby zapewnić idealne efekty wizualne na urządzeniach mobilnych. Dzięki odpowiednim przepływom pracy i wsparciu narzędzi, SVG stanie się niezbędnym zasobem graficznym w aplikacjach React Native.

Następne kroki

  • Użyj Przeglądarki SVG, aby sprawdzić pole widoku, wyrównanie i skalowanie przed importem.
  • Uruchom Optymalizator SVG, aby zmniejszyć złożoność SVG i zapewnić płynniejsze renderowanie na urządzeniach mobilnych.
  • Konwertuj zasoby za pomocą SVG to React Native, jeśli chcesz, aby kod komponentu był gotowy do skopiowania.

Powiązane artykuły

Kontynuuj odkrywanie przepływów pracy SVG i wskazówek dotyczących produkcji.