Guide d'importation React Native SVG : react-native-svg + SvgXml
SVG (Scalable Vector Graphics) est devenu un format de ressource graphique incontournable dans le développement de React Native. Comparé aux formats bitmap traditionnels (PNG, JPG), SVG offre une mise à l'échelle sans perte, des tailles de fichiers plus petites et un contrôle de style plus flexible. Cet article fournit une introduction détaillée à deux méthodes courantes d'importation et d'utilisation de fichiers SVG dans des projets React Native, ainsi que des exemples de code complets et des recommandations d'optimisation des performances.
Pourquoi utiliser SVG dans React Native
SVG (Scalable Vector Graphics) apporte plusieurs avantages clés au développement d'applications mobiles :
- Mise à l'échelle parfaite : les graphiques restent nets quelle que soit la taille ou la résolution de l'écran
- Taille de fichier plus petite : les fichiers SVG sont généralement plus légers que plusieurs ensembles d'actifs PNG.
- Style dynamique : les couleurs, les tailles et d'autres attributs peuvent être modifiés dynamiquement via des accessoires
- Cohérence : rendu identique sur les plates-formes iOS et Android
Dépendance principale : react-native-svg
La première étape pour utiliser les images SVG dans React Native consiste à installer la bibliothèque react-native-svg, qui permet de rendre nativement les fichiers SVG dans les applications React Native.
npm install react-native-svg
# or
yarn add react-native-svg
Remarque : Pour React Native 0.60 et supérieur, la liaison est généralement automatique. Pour les versions antérieures, vous devrez peut-être lier manuellement les modules natifs.
Méthode 1 : Utilisation de react-native-svg-transformer
Il s'agit de l'approche la plus recommandée, vous permettant d'importer directement des fichiers SVG en tant que composants, tout comme dans les projets Web React.
Installation et configuration
Tout d'abord, installez le transformateur :
npm install --save-dev react-native-svg-transformer
# or
yarn add --dev react-native-svg-transformer
Créez ou modifiez ensuite metro.config.js à la racine de votre projet :
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"],
},
};
})();
Exemple d'utilisation
Après configuration, vous pouvez importer directement les fichiers 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;
Cette méthode vous permet de traiter les fichiers SVG comme des composants React Native classiques, ce qui les rend faciles à importer et à utiliser dans toute votre application.
Avantages :
- Type-safe avec une excellente expérience de développement
- Prend en charge le contrôle de style dynamique via des accessoires
- Excellentes performances avec transformation au moment de la compilation
Cas d'utilisation : bibliothèques d'icônes statiques, immobilisations dans les systèmes de conception
Méthode 2 : utilisation de SvgXml pour le chargement dynamique
Le composant SvgXml de react-native-svg vous permet de rendre des SVG à partir de chaînes XML, ce qui offre plus de flexibilité dans les scénarios dynamiques.
Utilisation de base
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;
Chargement dynamique à partir de fichiers
SvgXml est particulièrement utile lorsque vous devez charger des SVG depuis le système de fichiers ou le réseau :
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;
};
Avantages :
- Prend en charge le chargement dynamique d'exécution
- Peut récupérer les SVG à partir des API ou des serveurs distants
- Gestion flexible du contenu généré par les utilisateurs
Considérations : Peut rencontrer des problèmes de performances lors du rendu répété de SVG complexes ou dynamiques, car il analyse XML au moment de l'exécution.
Stockage et organisation des fichiers SVG
Dans les projets React Native, vous stockez généralement les fichiers SVG dans un dossier d'actifs au sein de la structure de votre projet, puis vous les importez comme d'autres ressources.
Structure de répertoire recommandée :
src/
assets/
icons/
arrow-left.svg
arrow-right.svg
logos/
brand-primary.svg
brand-secondary.svg
components/
icon.tsx
Prévisualiser et valider dans SVG Viewer
Avant d'intégrer les SVG dans votre projet React Native, il est recommandé de les prévisualiser et de les valider dans SVG Viewer :
- Vérifiez viewBox : assurez-vous que viewBox est correctement configuré pour éviter les problèmes de recadrage ou de mise à l'échelle.
- Nettoyer le code redondant : supprimez les métadonnées et les attributs de l'éditeur ajoutés par les outils de conception
- Vérifier les chemins : Confirmez que les données du chemin sont complètes et optimisées
- Test de mise à l'échelle : prévisualisez à différentes tailles pour garantir que les effets visuels répondent aux attentes
L'utilisation d'un SVG Viewer vous aide à découvrir les problèmes pendant le développement, ce qui vous fait gagner du temps lors du débogage sur les appareils mobiles.
Optimisation des SVG pour de meilleures performances
Lors de l'utilisation de SVG dans React Native, l'optimisation des fichiers est particulièrement importante :
- Simplifiez les chemins : utilisez des outils comme SVG Optimizer ou SVGO pour réduire les points de chemin
- Supprimer les éléments inutilisés : Supprimez les calques masqués et les groupes vides
- Fusionner les styles en double : extrayez les attributs répétés dans des styles partagés
- Précision du contrôle : conservez les coordonnées du chemin à 2-3 décimales
Les SVG optimisés se chargent non seulement plus rapidement, mais s'affichent également mieux, en particulier dans les scénarios à haute fréquence comme le défilement de liste.
Recommandations pratiques
Basés sur une expérience réelle de projet, voici quelques conseils pratiques :
- Convention de dénomination unifiée : établissez des conventions de dénomination claires pour les fichiers SVG, tels que
icon-home.svg,logo-brand.svg - Encapsuler les composants communs : créez un composant Icône pour gérer de manière centralisée toutes les importations et l'utilisation des icônes.
- Définitions de types : ajoutez des définitions de type TypeScript aux composants SVG pour une meilleure expérience de développement
- Stratégie de chargement paresseux : pour les grands jeux d'icônes, envisagez le chargement à la demande plutôt que de tout regrouper
Résumé
Il existe plusieurs façons d'utiliser SVG dans React Native, et le choix de la bonne méthode dépend de votre scénario spécifique :
- Bibliothèques d'icônes statiques : utilisez
react-native-svg-transformerpour la meilleure expérience de développement - Contenu dynamique : utilisez SvgXml pour le chargement et le traitement de l'exécution
- Scénarios critiques pour les performances : optimisez les fichiers SVG à l'avance et contrôlez la complexité
Quelle que soit la méthode que vous choisissez, il est recommandé de valider au préalable la qualité du fichier dans un SVG Viewer pour garantir des effets visuels idéaux sur les appareils mobiles. Grâce à des flux de travail appropriés et à la prise en charge des outils, SVG deviendra une ressource graphique indispensable dans les applications React Native.
Prochaines étapes
- Utilisez SVG Viewer pour vérifier viewBox, l'alignement et la mise à l'échelle avant l'importation.
- Exécutez SVG Optimizer pour réduire la complexité de SVG et obtenir un rendu mobile plus fluide.
- Convertissez les actifs avec SVG to React Native lorsque vous souhaitez un code de composant prêt à être copié.