Cómo cargar y usar íconos en React Native con react-native-vector-icons
En este artículo, aprenderás a configurar y usar el paquete react-native-vector-icons
en un proyecto de React Native. Además, veremos cómo limitar las fuentes cargadas para optimizar la aplicación, utilizando Ionicons
como ejemplo.
Instalación de react-native-vector-icons
Primero, instalaremos el paquete principal y sus tipos para TypeScript.
-
Instala
react-native-vector-icons
:npm install react-native-vector-icons
-
Instala los tipos de TypeScript para soporte en desarrollo:
npm i --save-dev @types/react-native-vector-icons
-
npm install --save @react-native-vector-icons/Ionicons
o el que desees
Enteoria ya esta, lo usas asi :
import React from 'react';
import { View, Text } from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
export const HomeScreen = () => {
return (
<View>
<Text>HomeScreen</Text>
<Text>
<Icon name="rocket" size={30} color="#900" />
</Text>
</View>
);
};
Pero si no anda segui las instrucciones de abajo.
Configuración en Android
Edición del archivo build.gradle
-
Abre
android/app/build.gradle
(NOandroid/build.gradle
). -
Agrega el siguiente código para cargar las fuentes personalizadas:
apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" project.ext.vectoricons = [ iconFontNames: [ 'Ionicons.ttf' ] // Especificar las fuentes deseadas ] apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")
Con esta configuración, solo se cargará la fuente
Ionicons
, evitando cargar todas las fuentes predeterminadas, lo cual mejora el rendimiento.
Uso de íconos en toda la aplicación
Para que los íconos estén disponibles de manera global, podemos configurarlos directamente en nuestro archivo App.tsx
utilizando react-native-paper
.
-
Modifica el archivo
App.tsx
para incluir los íconos de Ionicons:import React from 'react'; import { PaperProvider } from 'react-native-paper'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { HelloWorld } from './src/presentation/screen/HelloWord'; import IonIcon from 'react-native-vector-icons/Ionicons'; export const App = () => { return ( <SafeAreaProvider> <PaperProvider settings={{ icon: props => <IonIcon {...props} />, // Configuración global de íconos }} > <HelloWorld /> </PaperProvider> </SafeAreaProvider> ); };
Con esta configuración, los componentes de react-native-paper
podrán usar Ionicons
automáticamente para la propiedad icon
.
Uso de íconos en componentes específicos
Usando la propiedad icon
de componentes como <FAB>
Podemos usar la propiedad icon
de los componentes de react-native-paper
con la palabra clave del ícono, como en el siguiente ejemplo:
<FAB
icon="add"
onPress={() => console.log('Fab Pressed')}
style={{ position: 'absolute', right: 16, bottom: 16 }}
/>
Importando y usando directamente el componente Icon
También puedes importar el componente Icon
de react-native-vector-icons/Ionicons
para utilizarlo en cualquier parte de la aplicación:
import Icon from 'react-native-vector-icons/Ionicons';
<Icon name="add" size={25} color="#000" />;
Ejemplo completo
import React, { useState } from 'react';
import { Text, View } from 'react-native';
import { FAB } from 'react-native-paper';
import Icon from 'react-native-vector-icons/Ionicons';
import { globalStyle } from '../../theme/global.styles';
export const Counter = () => {
const [counter, setCounter] = useState(0);
return (
<View style={globalStyle.centerContainer}>
<Text>{counter}</Text>
<FAB
icon="add" // Usando la palabra clave del ícono
onLongPress={() => setCounter(0)}
onPress={() => setCounter(counter + 1)}
style={globalStyle.fab}
label="+1"
/>
<Icon name="add" size={25} color="#000" /> {/* Usando el componente Icon */}
</View>
);
};
Recursos adicionales
Para más información sobre la configuración y uso de react-native-vector-icons
y la fuente Ionicons
, puedes consultar los siguientes enlaces oficiales: