логотип PurpleSchool
логотип PurpleSchool

Использование и настройка плагинов в React Native

Автор

Олег Марков

Введение

React Native — мощный инструмент для кроссплатформенной разработки мобильных приложений. Одна из его сильных сторон — поддержка плагинов, которые позволяют использовать функциональность, недоступную из коробки, и интегрироваться с нативными возможностями платформ. Зная, как правильно устанавливать, настраивать и использовать плагины, вы сможете значительно расширить возможности своих приложений, а также оптимизировать процесс разработки.

В этой статье вы узнаете:

  • Что такое плагины в React Native, зачем они нужны и как они работают
  • Как находить, устанавливать и удалять плагины
  • Как настраивать плагины и решать типовые проблемы с интеграцией
  • Как писать собственные плагины
  • Какие есть особенности связи JavaScript и нативного кода через плагины

По ходу статьи я буду показывать примеры кода и давать рекомендации из личного опыта, чтобы упростить ваш путь к глубокому пониманию работы с плагинами.

Что такое плагины в React Native и зачем они нужны

Плагины (или модули, или библиотеки) — это расширения, которые добавляют вашему приложению новый функционал. Обычно они обеспечивают доступ к нативным возможностям устройств (камере, Bluetooth, геолокации, файловой системе и пр.), которые невозможны простыми средствами JavaScript, или просто реализуют часто востребованные компоненты.

Классический пример: если вы хотите использовать в своем приложении Push-уведомления, вам потребуется плагин, который взаимодействует с нативными Android/iOS API для отправки и получения сообщений.

Плагины значительно расширяют возможности React Native приложений, позволяя интегрировать нативные функции, работать с аппаратным обеспечением и упрощать решение сложных задач. Однако, для эффективного использования плагинов необходимо уметь их правильно устанавливать, настраивать и интегрировать в проект. Нужно понимать, как работают нативные модули, как связывать их с JavaScript кодом и как решать проблемы совместимости. Если вы хотите детальнее погрузиться в использование плагинов и нативных модулей в React Native, — приходите на наш большой курс React Native и Expo Router. На курсе 184 уроков и 11 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Виды плагинов

  • JS-Only плагины — реализованы только на JS, используются без вмешательства в нативный код, работают как любая npm-библиотека.
  • Native Modules — требуют интеграции с нативным кодом (Java/Kotlin для Android или Objective-C/Swift для iOS).
  • UI-компоненты — специальные плагины с визуальными элементами (например, кастомные селекторы, карты, графики), которые могут иметь JS- и нативную части.

Как находить и выбирать плагины

Существует множество плагинов разного качества и назначения. Наиболее популярный способ поиска и выбора — использовать React Native Directory или npm.

Перед установкой плагина проверьте:

  • Актуальность и поддержка: Когда был последний коммит? Поддерживается ли последний React Native?
  • Совместимость с платформами: Указана ли поддержка iOS/Android?
  • Звезды, репутация: Сколько звезд на GitHub, много ли открытых проблем?
  • Документация: Есть ли подробные инструкции по установке и использованию?

Пример поиска плагина

Допустим, вам нужен плагин для доступа к камере. Открываете React Native Directory и вводите “camera”. Смотрите на популярность библиотек, совместимость и читаем документацию, прежде чем выбрать, например, react-native-camera или react-native-vision-camera.

Установка плагинов

Установка через npm или yarn

Плагины ставятся стандартными менеджерами пакетов:

# Установка через npm
npm install react-native-camera

# Или через yarn
yarn add react-native-camera

Linking (связка)

В более старых версиях React Native (до 0.60.x) требовалась ручная связка (link) через команду CLI:

react-native link react-native-camera

Но сейчас благодаря Autolinking в RN 0.60+ это не требуется — плагины автоматически связываются с нативными частями.

Исключение: Некоторые плагины могут требовать дополнительных шагов настройки (например, изменения в AndroidManifest.xml или Info.plist).

Установка плагинов с нативными зависимостями

Obратите внимание, что некоторые библиотеки требуют установки системных пакетов через CocoaPods для iOS. После установки плагина рекомендуется выполнить в каталоге ios вашего проекта:

cd ios
pod install
cd ..

Это установит все необходимые нативные зависимости для iOS.

Использование плагинов: примеры на практике

Давайте рассмотрим, как использовать плагины в проекте на React Native.

Пример 1: Работа с камерой

Установим и подключим плагин камеры (react-native-vision-camera):

yarn add react-native-vision-camera
cd ios && pod install

Теперь импортируем и используем компонент из библиотеки:

import { Camera, useCameraDevices } from 'react-native-vision-camera'
import { useEffect, useState } from 'react'
import { View, Text } from 'react-native'

export default function App() {
  const devices = useCameraDevices()
  const device = devices.back // Получаем информацию о задней камере

  // Запрашиваем права на использование камеры
  useEffect(() => {
    (async () => {
      const status = await Camera.requestCameraPermission()
      // Вы можете обработать статус, например, показать сообщение
    })()
  }, [])

  if (device == null) return <Text>Загрузка...</Text> // Пока устройство не определено

  return (
    <View style={{ flex: 1 }}>
      <Camera
        style={{ flex: 1 }}
        device={device}
        isActive={true} // Включаем камеру
      />
    </View>
  )
}

В примере показано, как получить разрешения, выбрать камеру и отобразить видеопоток

Особенности работы с нативными плагинами

  • Разрешения: не забывайте про запрос прав на доступ к аппаратуре. Для iOS нужно добавить строки с описаниями целей в Info.plist.
  • Настройка Android: для Android также могут потребоваться изменения в AndroidManifest.xml.

Пример 2: Работа со сторожем состояния сети

Используем библиотеку @react-native-community/netinfo для отслеживания соединения:

npm install @react-native-community/netinfo
cd ios && pod install

Теперь подключаем и используем:

import NetInfo from '@react-native-community/netinfo'
import { useEffect, useState } from 'react'
import { Text } from 'react-native'

function NetworkStatus() {
  const [isConnected, setIsConnected] = useState(null)

  useEffect(() => {
    // Подписываемся на изменения сети
    const unsubscribe = NetInfo.addEventListener(state => {
      setIsConnected(state.isConnected)
    })
    // Очищаем подписку при размонтировании
    return () => unsubscribe()
  }, [])

  if (isConnected === null) {
    return <Text>Проверка подключения…</Text>
  }
  return (
    <Text>
      {isConnected ? 'Есть интернет' : 'Интернета нет'}
    </Text>
  )
}

export default NetworkStatus

Компонент отображает наличие соединения с интернетом в реальном времени

Пример 3: Работа с push-уведомлениями

Смотрим пример интеграции с @react-native-firebase/messaging:

npm install @react-native-firebase/app @react-native-firebase/messaging
cd ios && pod install

Далее добавляем обработку уведомлений:

import messaging from '@react-native-firebase/messaging'
import { useEffect } from 'react'

function useNotifications() {
  useEffect(() => {
    // Получаем разрешение на push-уведомления
    messaging().requestPermission()

    // Обработка входящих сообщений, когда приложение на переднем плане
    const unsubscribe = messaging().onMessage(async remoteMessage => {
      // Здесь можно показать алерт или обработать данные
      console.log('Получено уведомление:', remoteMessage)
    })
    
    return unsubscribe
  }, [])
}

// Используем хук в любом компоненте
function Main() {
  useNotifications()
  // ...
}

Настройка push-уведомлений требует дополнительной нативной конфигурации в Android и iOS

Дополнительная настройка плагинов

Изменения в Info.plist (iOS)

Некоторые плагины требуют добавления ключей в ios/YourApp/Info.plist:

<key>NSCameraUsageDescription</key>
<string>Требуется доступ к камере</string>

Так вы сообщаете пользователю, зачем приложению камера

Изменения в AndroidManifest.xml (Android)

В Android обычно вносят изменения в файл android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />

Добавление разрешений для доступа к камере

Чтение документации плагинов

Всегда обращайтесь к документации плагина — условия настройки могут отличаться для каждого расширения!

Удаление и обновление плагинов

Удаление плагинов

npm uninstall имя_пакета
# или
yarn remove имя_пакета

Если плагин вносил изменения в Info.plist или AndroidManifest.xml — убедитесь, что вы их вручную удалили.

Для iOS после удаления библиотеки рекомендуется:

cd ios
pod install

Обновление плагинов

Обновление через npm или yarn:

npm update имя_пакета
# или
yarn upgrade имя_пакета

Чтобы избежать проблем несовместимости, сверяйте changelog библиотеки и тестируйте проект после обновлений.

Написание собственных плагинов

Если требуемой функциональности нет среди готовых решений, всегда можно написать собственный плагин. Общий процесс таков:

  1. Определите, какую часть кода нужно реализовать на нативном уровне.
  2. Создайте папку android и/или ios внутри вашего JS-модуля.
  3. Реализуйте нативные методы на Swift/Objective-C или Java/Kotlin, используя API платформы.
  4. Экспортируйте их в JavaScript-код через мост (Bridge).

Пример: сделаем небольшой JS-модуль, который "отправляет" тост-сообщение для Android.

JS-часть

import { NativeModules } from 'react-native'

export default NativeModules.ToastExample
// Теперь можно вызывать методы ToastExample.show(...)

Android-часть (Java)

Создайте файл ToastExampleModule.java в android/src/main/java/...

// Импортируем необходимые классы
package com.yourproject;

import android.widget.Toast;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactMethod;

public class ToastExampleModule extends ReactContextBaseJavaModule {
  public ToastExampleModule(ReactApplicationContext reactContext) {
    super(reactContext);
  }

  @Override
  public String getName() {
    return "ToastExample";
  }

  // Экспортируем метод show в JS
  @ReactMethod
  public void show(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
  }
}

Это основной каркас для взаимодействия JS и Android

Ручная интеграция VS библиотечные генераторы

Если задачи сложные или хочется опубликовать свой плагин, используйте шаблоны, например, react-native-create-library.

Особенности связи JS и платформенного кода

React Native использует мост (Bridge) для передачи данных и команд между JS и нативным кодом. Это позволяет JS-коду вызывать функции из Objective-C/Swift или Java/Kotlin и получать результаты обратно.

Но есть важные нюансы:

  • Передача больших данных может быть медленной.
  • Для асинхронных операций используйте Promise или колбэки.
  • Не все нативные API легко покрываются через мост — иногда лучше реализовать обертку на стороне платформы.

Лучшие практики работы с плагинами

  • Документируйте плагины в README вашего проекта: объясняйте, зачем нужен каждый пакет и есть ли у него тонкости настройки.
  • Держите плагины в актуальном состоянии: устаревшие пакеты часто содержат уязвимости.
  • Минимизируйте количество плагинов: чем меньше зависимости, тем легче следить за их работоспособностью.
  • Тестируйте приложение после установки/обновления каждого плагина: особенно внимательно следите за критическими ошибками запуска на обоих платформах.
  • Используйте проверенные библиотеки: экономьте время, выбирая популярные и хорошо документированные плагины.

Заключение

Плагины открывают для React Native приложения широкие возможности нативной платформы, экономят часы разработки и делают клиентский код чище и короче. Вы научились искать, устанавливать, настраивать плагины, а также писать собственные расширения. Используйте приведённые выше практики и примеры, чтобы добавить нужную функциональность в ваше приложение быстро и без ошибок.

Использование плагинов — это лишь один из аспектов разработки качественных React Native приложений. Для создания полноценного приложения важно понимать, как управлять состоянием, создавать переиспользуемые компоненты, использовать навигацию и настраивать окружение. На нашем курсе React Native и Expo Router вы найдете все необходимые знания и навыки для создания профессиональных React Native приложений. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир React Native прямо сегодня.

Частозадаваемые технические вопросы по теме статьи и ответы на них

Вопрос 1: Как обновить версию плагина, не нарушив работоспособность приложения?
Ответ:

  • Проверьте changelog плагина на наличии breaking changes.
  • Временно переключитесь на отдельную ветку в git.
  • Обновите плагин (npm update или yarn upgrade).
  • Выполните сборку и прогоните тесты на обоих платформах.
  • Если что-то не работает, посмотрите лог ошибок и обратитесь к документации или GitHub issues плагина.

Вопрос 2: Почему после установки плагина для iOS возникает ошибка при сборке?
Ответ:

  • Проверьте, выполнили ли вы cd ios && pod install.
  • Убедитесь, что Xcode открыт с правильным workspace-файлом (YourApp.xcworkspace), а не .xcodeproj.
  • Проверьте, не забыли ли вы добавить нужные ключи в Info.plist.

Вопрос 3: Что делать, если Android Studio ругается на “Cannot resolve symbol” после установки плагина?
Ответ:

  • Выполните ./gradlew clean в каталоге android.
  • Перезапустите Android Studio.
  • Проверьте синхронизацию gradle.
  • Обновите зависимости командой npm install повторно и убедитесь, что версия React Native и плагинов совместима.

Вопрос 4: Как правильно удалить плагины, если проект перестал собираться?
Ответ:

  • Удалите плагин с помощью npm uninstall или yarn remove.
  • Очистите кэш: npm start -- --reset-cache.
  • Для iOS — cd ios && pod install.
  • Для Android — ./gradlew clean.
  • Убедитесь, что из Info.plist и AndroidManifest.xml убраны все связанные строки.

Вопрос 5: Как проверить, что плагин реально работает на устройстве, а не только в эмуляторе?
Ответ:

  • Установите приложение на реальное устройство.
  • Используйте логи или всплывающие сообщения (например, через Alert) для проверки работы функционала, связанного с плагином.
  • Для некоторых функций (Bluetooth, камера, push) эмулятор обычно не дает полной картины — обязательно тестируйте на девайсе.
Стрелочка влевоУправление состоянием с Redux на React NativeГайд по push и notifications на React NativeСтрелочка вправо

Постройте личный план изучения React-native до уровня Middle — бесплатно!

React-native — часть карты развития Mobile

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по React-native

Работа со ScrollView в React NativeРабота с видео в React NativeКак реализовать аудиоплеер на React NativeНастройка и использование input и textinput в React NativeИнтеграция видео плеера в приложение на React NativeИспользование выпадающих списков в React NativeСоздание и настройка native module на React NativeКак создать модальные окна в React NativeРабота с изображениями в React NativeОтображение списков данных в React NativeГайд по файловой системе в React NativeИнтеграция камеры в приложение на React NativeСоздание интерактивных кнопок в React Native
Как использовать векторные иконки в React Native5 популярных библиотек UI компонентов React NativeСоздание и использование tabs в React NativeРуководство по стилизации компонентов в React NativeОптимизация переходов между экранами в React NativeАдаптация safe area context на React NativeОбзор библиотек для навигации в React NativeСоздание сложных анимаций (reanimated) на React NativeИспользование библиотеки стилей Paper в React NativeРуководство по navigation в React NativeОптимизация отображения списков в React NativeКак реализовать linking на React NativeГайд по UI-китам для React NativeГде искать elements для приложения на React NativeРабота с цветами в React Native
Открыть базу знаний

Лучшие курсы по теме

изображение курса

React Native и Expo Router

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Основы JavaScript

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий