Как подключить иконки в проекте React Native?
В React Native подключение иконок чаще всего реализуется с помощью библиотеки react-native-vector-icons, которая предоставляет доступ к большому количеству популярных наборов иконок (FontAwesome, MaterialIcons, Ionicons и др.). Она позволяет использовать иконки как компоненты, настраивать их размер, цвет, обрабатывать события нажатия и интегрировать с другими элементами интерфейса.
Установка библиотеки react-native-vector-icons
1. Установка через npm или yarn
npm install react-native-vector-icons
или
yarn add react-native-vector-icons
2. Настройка для проектов на React Native CLI (не Expo)
Если вы используете React Native CLI (не Expo), иконки нужно связать (link) или убедиться, что ваш проект использует автолинковку (начиная с React Native 0.60+).
Для Android:
- В android/app/build.gradle добавьте:
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
- Убедитесь, что шрифты будут скопированы в APK.
Для iOS:
-
Откройте ios/YourProject.xcworkspace в Xcode.
-
Перетащите содержимое папки node_modules/react-native-vector-icons/Fonts в Xcode → Resources проекта.
-
Убедитесь, что шрифты указаны в Info.plist:
<key>UIAppFonts</key>
<array>
<string>AntDesign.ttf</string>
<string>Entypo.ttf</string>
<string>EvilIcons.ttf</string>
<string>Feather.ttf</string>
<string>FontAwesome.ttf</string>
<string>FontAwesome5_Brands.ttf</string>
<string>FontAwesome5_Regular.ttf</string>
<string>FontAwesome5_Solid.ttf</string>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>MaterialIcons.ttf</string>
<string>MaterialCommunityIcons.ttf</string>
<string>SimpleLineIcons.ttf</string>
<string>Octicons.ttf</string>
<string>Zocial.ttf</string>
</array>
3. Использование в проектах на Expo
В Expo react-native-vector-icons уже встроена, и вы можете использовать её без дополнительной установки или настройки. Вместо этого используйте обёртку от Expo:
import { Ionicons } from '@expo/vector-icons';
Использование иконок
Пример с Ionicons:
import Ionicons from 'react-native-vector-icons/Ionicons';
<Ionicons name="home-outline" size={30} color="#4F8EF7" />
Поддерживаемые наборы иконок
react-native-vector-icons поддерживает множество коллекций:
Импорт | Название коллекции |
---|---|
AntDesign | Ант-дизайн |
--- | --- |
Entypo | Entypo |
--- | --- |
EvilIcons | EvilIcons |
--- | --- |
Feather | Feather |
--- | --- |
FontAwesome | FontAwesome 4 |
--- | --- |
FontAwesome5 | FontAwesome 5 |
--- | --- |
Foundation | Foundation |
--- | --- |
Ionicons | Ionicons |
--- | --- |
MaterialIcons | Material Icons |
--- | --- |
MaterialCommunityIcons | Material Community Icons |
--- | --- |
Octicons | Octicons |
--- | --- |
SimpleLineIcons | Simple Line Icons |
--- | --- |
Zocial | Zocial |
--- | --- |
Пример импорта:
import MaterialIcons from 'react-native-vector-icons/MaterialIcons';
import FontAwesome from 'react-native-vector-icons/FontAwesome';
Атрибуты и настройка
Все иконки поддерживают следующие свойства:
Свойство | Описание |
---|---|
name | Название иконки (строка) |
--- | --- |
size | Размер в пикселях |
--- | --- |
color | Цвет |
--- | --- |
style | Стилизация (например, отступы) |
--- | --- |
Пример:
<MaterialIcons name="menu" size={32} color="black" style={{ marginRight: 10 }} />
Иконка как кнопка
Иконки можно использовать как интерактивные элементы:
<Ionicons
name="ios-add-circle-outline"
size={40}
color="green"
onPress={() => alert('Нажато')}
/>
Поиск иконок по названию
Используйте официальный Icon Explorer от разработчика библиотеки:
-
Позволяет искать по ключевым словам.
-
Позволяет копировать точное имя (name) иконки.
-
Указывает из какого набора иконок она.
Использование в TabBar и Drawer
Многие навигационные библиотеки (например, @react-navigation) поддерживают интеграцию с react-native-vector-icons.
Пример с нижним таббаром:
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import Ionicons from 'react-native-vector-icons/Ionicons';
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: ({ color, size }) => {
let iconName;
if (route.name === 'Home') {
iconName = 'home-outline';
} else if (route.name === 'Settings') {
iconName = 'settings-outline';
}
return <Ionicons name={iconName} size={size} color={color} />;
},
})}
\>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
Кастомные шрифты-иконки
Если нужно добавить собственные иконки (например, SVG, превращённые в шрифт), можно использовать генераторы вроде IcoMoon и сгенерировать .ttf шрифт, который можно подключить как пользовательский шрифт.
Пример полного использования
import React from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import FontAwesome from 'react-native-vector-icons/FontAwesome';
export default function IconExample() {
return (
<View style={styles.container}>
<Text style={styles.title}>Мои иконки</Text>
<FontAwesome name="rocket" size={40} color="#900" />
<TouchableOpacity style={styles.button}>
<FontAwesome name="thumbs-up" size={24} color="white" />
<Text style={styles.buttonText}>Нравится</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
marginTop: 100,
alignItems: 'center',
},
title: {
fontSize: 22,
marginBottom: 20,
},
button: {
flexDirection: 'row',
backgroundColor: '#2980b9',
padding: 12,
borderRadius: 6,
alignItems: 'center',
marginTop: 20,
},
buttonText: {
color: '#fff',
marginLeft: 10,
fontSize: 16,
},
});
Библиотека react-native-vector-icons предоставляет обширный набор инструментов для интеграции иконок в интерфейс, позволяет использовать готовые наборы, делать иконки интерактивными, настраивать стили и использовать их в системах навигации. В проектах на Expo подключение ещё проще, так как библиотека уже встроена и готова к использованию без настройки.