Hoy vamos a aprender cómo podemos añadir una imagen SVG en React Native usando Expo.
Lo primero que haremos es instalar las dependencias necesarias:
Primero react-native-svg
expo install react-native-svg
Y ahora instalamos react-native-svg-transformer
npm install --save-dev react-native-svg-transformer
Una vez instaladas tenemos que configurar react-native-svg-transformer.
Para ello abrimos el archivo metro.config.js y añadimos:
const { getDefaultConfig } = require("expo/metro-config"); module.exports = (() => { const config = getDefaultConfig(__dirname); const { transformer, resolver } = config; config.transformer = { ...transformer, babelTransformerPath: require.resolve("react-native-svg-transformer") }; config.resolver = { ...resolver, assetExts: resolver.assetExts.filter((ext) => ext !== "svg"), sourceExts: [...resolver.sourceExts, "svg"] }; return config; })();
Y si usamos TypeScript tendremos que añadir este código dentro del archivo declarations.d.ts (si no tenemos este archivo, lo creamos).
declare module "*.svg" { import React from "react"; import { SvgProps } from "react-native-svg"; const content: React.FC<SvgProps>; export default content; }
Y ahora vamos a probarlo.
Primero guardamos este svg de prueba:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /> </svg>
Es un circulo:
Y lo guardamos con el nombre circle.svg.
Una vez guardado, lo vamos a cargar en nuestro componente de la siguiente forma:
Primero lo importamos:
import Circle from './assets/circle.svg';
Y lo utilizamos como si fuese un componente más:
<Circle width={100} height={100} />
Una vez implementado, debemos hacer un nuevo build.
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.