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, Investigador, 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.