HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>React Native - это технология, которая позволяет создавать мобильные продукты на JavaScript, сохраняя внешний вид и поведение как у полностью нативных решений. Разработка ведётся на базе идей React, но итоговое исполнение работает не в браузере, а внутри мобильной среды Android или iOS.</p>
1 <p>React Native - это технология, которая позволяет создавать мобильные продукты на JavaScript, сохраняя внешний вид и поведение как у полностью нативных решений. Разработка ведётся на базе идей React, но итоговое исполнение работает не в браузере, а внутри мобильной среды Android или iOS.</p>
2 <h2>Общие характеристики</h2>
2 <h2>Общие характеристики</h2>
3 <p>Идея появилась внутри Facebook, когда разработчикам требовалось ускорить выпуск мобильных обновлений без необходимости полностью переписывать функциональность на двух разных языках. Решением стало объединение декларативного подхода React с возможностью выводить интерфейс через нативные компоненты. В отличие от Cordova, где интерфейс фактически рендерится в WebView, здесь отрисовка выполняется через элементы операционной среды.Что делает работу более плавной, с мешьшим количеством ограничений. По сравнению с Flutter, где всё строится собственным движком, React Native делает упор на повторное использование существующих возможностей платформ.</p>
3 <p>Идея появилась внутри Facebook, когда разработчикам требовалось ускорить выпуск мобильных обновлений без необходимости полностью переписывать функциональность на двух разных языках. Решением стало объединение декларативного подхода React с возможностью выводить интерфейс через нативные компоненты. В отличие от Cordova, где интерфейс фактически рендерится в WebView, здесь отрисовка выполняется через элементы операционной среды.Что делает работу более плавной, с мешьшим количеством ограничений. По сравнению с Flutter, где всё строится собственным движком, React Native делает упор на повторное использование существующих возможностей платформ.</p>
4 <h2>Архитектура</h2>
4 <h2>Архитектура</h2>
5 <p>Основная идея - разделение логики с визуальной частью. JavaScript отвечает за логику, взаимодействие, обработку событий. Отдельный уровень связывает ОС-код с элементами Android/iOS. Этот мост (JS bridge) передаёт данные асинхронно, что позволяет не блокировать интерфейс.</p>
5 <p>Основная идея - разделение логики с визуальной частью. JavaScript отвечает за логику, взаимодействие, обработку событий. Отдельный уровень связывает ОС-код с элементами Android/iOS. Этот мост (JS bridge) передаёт данные асинхронно, что позволяет не блокировать интерфейс.</p>
6 <p>Структура включает:</p>
6 <p>Структура включает:</p>
7 <ul><li>UI-компоненты, соответствующие элементам мобильных ОС;</li>
7 <ul><li>UI-компоненты, соответствующие элементам мобильных ОС;</li>
8 <li>мост, обеспечивающий двустороннее общение;</li>
8 <li>мост, обеспечивающий двустороннее общение;</li>
9 <li>модуль нативных расширений, за счет которого можно подключать функции, которые недоступны напрямую из JS.</li>
9 <li>модуль нативных расширений, за счет которого можно подключать функции, которые недоступны напрямую из JS.</li>
10 </ul><p>Благодаря такой схеме разработчики могут комбинировать всё, что уже есть в мобильной ОС, с общим слоем логики, написанным на одном языке.</p>
10 </ul><p>Благодаря такой схеме разработчики могут комбинировать всё, что уже есть в мобильной ОС, с общим слоем логики, написанным на одном языке.</p>
11 <h2>Основные возможности</h2>
11 <h2>Основные возможности</h2>
12 <ul><li><p>Популярной технологию сделали:</p>
12 <ul><li><p>Популярной технологию сделали:</p>
13 <p>единый код под Android и iOS - значительная экономия времени;</p>
13 <p>единый код под Android и iOS - значительная экономия времени;</p>
14 </li>
14 </li>
15 <li><p>быстрый цикл разработки - Hot Reload позволяет моментально видеть изменения;</p>
15 <li><p>быстрый цикл разработки - Hot Reload позволяет моментально видеть изменения;</p>
16 </li>
16 </li>
17 <li><p>доступ к возможностям устройства - датчики, камера, хранилище, геолокация подключаются через "родные" модули;</p>
17 <li><p>доступ к возможностям устройства - датчики, камера, хранилище, геолокация подключаются через "родные" модули;</p>
18 </li>
18 </li>
19 <li><p>широкая база сторонних пакетов.</p>
19 <li><p>широкая база сторонних пакетов.</p>
20 </li>
20 </li>
21 </ul><p>Такая модель позволяет ускорять разработку, сохраняя производительность.</p>
21 </ul><p>Такая модель позволяет ускорять разработку, сохраняя производительность.</p>
22 <h2>Поток разработки</h2>
22 <h2>Поток разработки</h2>
23 <p>В типичном проекте есть несколько частей:</p>
23 <p>В типичном проекте есть несколько частей:</p>
24 <ul><li>каталог с экраном и компонентами;</li>
24 <ul><li>каталог с экраном и компонентами;</li>
25 <li>слой стилей, напоминающий CSS;</li>
25 <li>слой стилей, напоминающий CSS;</li>
26 <li>конфигурация для Android и iOS;</li>
26 <li>конфигурация для Android и iOS;</li>
27 <li>набор зависимостей, подключаемых через npm/yarn.</li>
27 <li>набор зависимостей, подключаемых через npm/yarn.</li>
28 </ul><p>Компоненты бывают классовыми или функциональными (с хуками). Стили описываются объектами, которые напоминают CSS, но работают по принципам мобильной среды. Благодаря такому подходу разработчик может быстро собрать структуру интерфейса, подключить переходы между экранами, организовать состояние, поддерживать сетевую работу.</p>
28 </ul><p>Компоненты бывают классовыми или функциональными (с хуками). Стили описываются объектами, которые напоминают CSS, но работают по принципам мобильной среды. Благодаря такому подходу разработчик может быстро собрать структуру интерфейса, подключить переходы между экранами, организовать состояние, поддерживать сетевую работу.</p>
29 <h3>Пример кода</h3>
29 <h3>Пример кода</h3>
30 <p>Посмотрим, как выглядит самый простой экран на RN. import React from 'react';import { Text, View } from 'react-native';export default function App() { return ( Hello, world! );} Здесь:</p>
30 <p>Посмотрим, как выглядит самый простой экран на RN. import React from 'react';import { Text, View } from 'react-native';export default function App() { return ( Hello, world! );} Здесь:</p>
31 <p>View - контейнер, аналог div в вебе; Text - элемент для вывода текста; объект в style задаёт выравнивание + другие параметры оформления.</p>
31 <p>View - контейнер, аналог div в вебе; Text - элемент для вывода текста; объект в style задаёт выравнивание + другие параметры оформления.</p>
32 <p>Чтобы добавить внешние пакеты, используют npm или yarn: yarn add @react-navigation/native После установки модуль подключают как обычную JS-зависимость, далее используют для навигации между экранами, работы с формами, сетевыми запросами.</p>
32 <p>Чтобы добавить внешние пакеты, используют npm или yarn: yarn add @react-navigation/native После установки модуль подключают как обычную JS-зависимость, далее используют для навигации между экранами, работы с формами, сетевыми запросами.</p>
33 <h2>Преимущества и ограничения</h2>
33 <h2>Преимущества и ограничения</h2>
34 <p>У мобильной технологии есть заметные плюсы:</p>
34 <p>У мобильной технологии есть заметные плюсы:</p>
35 <ul><li>единый стек - JS + экосистема React, что упрощает жизнь фронтенд-разработчикам;</li>
35 <ul><li>единый стек - JS + экосистема React, что упрощает жизнь фронтенд-разработчикам;</li>
36 <li>быстрая итерация благодаря Hot Reload и Live Reload;</li>
36 <li>быстрая итерация благодаря Hot Reload и Live Reload;</li>
37 <li>нативный UI - интерфейс собирается из реальных компонентов Android/iOS;</li>
37 <li>нативный UI - интерфейс собирается из реальных компонентов Android/iOS;</li>
38 <li>богатое сообщество, множество готовых библиотек: навигация, формы, анимации.</li>
38 <li>богатое сообщество, множество готовых библиотек: навигация, формы, анимации.</li>
39 </ul><p>Минусы:</p>
39 </ul><p>Минусы:</p>
40 <ul><li>производительность иногда уступает оригинальному коду, особенно в тяжёлой 3D-графике и ресурсоёмких играх;</li>
40 <ul><li>производительность иногда уступает оригинальному коду, особенно в тяжёлой 3D-графике и ресурсоёмких играх;</li>
41 <li>зависимость от мостика между JS и нативной частью - при большом количестве мелких операций он может становиться узким местом;</li>
41 <li>зависимость от мостика между JS и нативной частью - при большом количестве мелких операций он может становиться узким местом;</li>
42 <li>поддержка платформы: для сложных фич всё равно нужны разработчики, которые пишут на Kotlin/Java или Swift/Objective-C;</li>
42 <li>поддержка платформы: для сложных фич всё равно нужны разработчики, которые пишут на Kotlin/Java или Swift/Objective-C;</li>
43 <li>рассинхронизация версий библиотек - популярные пакеты обновляются не всегда синхронно, что иногда приводит к конфликтам.</li>
43 <li>рассинхронизация версий библиотек - популярные пакеты обновляются не всегда синхронно, что иногда приводит к конфликтам.</li>
44 </ul><p>В итоге инструмент оптимален для большинства бизнес-кейсов, а также контентных продуктов, но для тяжёлых игр или низкоуровневой работы с железом лучше выбирать полностью нативный стек.</p>
44 </ul><p>В итоге инструмент оптимален для большинства бизнес-кейсов, а также контентных продуктов, но для тяжёлых игр или низкоуровневой работы с железом лучше выбирать полностью нативный стек.</p>
45 <h2>Современные тренды</h2>
45 <h2>Современные тренды</h2>
46 <p>Экосистема активно развивается. Вокруг неё формируется целый набор технологий:</p>
46 <p>Экосистема активно развивается. Вокруг неё формируется целый набор технологий:</p>
47 <ul><li>Expo - набор инструментов и облачных сервисов, который упрощает создание проектов: не нужно руками трогать "родные" настройки, достаточно JS-части;</li>
47 <ul><li>Expo - набор инструментов и облачных сервисов, который упрощает создание проектов: не нужно руками трогать "родные" настройки, достаточно JS-части;</li>
48 <li>Fabric + новый архитектурный стек - постепенный переход на более быстрый механизм рендеринга, новый подход к взаимодействию JS и нативного слоя;</li>
48 <li>Fabric + новый архитектурный стек - постепенный переход на более быстрый механизм рендеринга, новый подход к взаимодействию JS и нативного слоя;</li>
49 <li>RN Web - возможность использовать те же компоненты в браузере, что облегчает создание единых интерфейсов для разных платформ;</li>
49 <li>RN Web - возможность использовать те же компоненты в браузере, что облегчает создание единых интерфейсов для разных платформ;</li>
50 <li>тесная связка с TypeScript, что повышает надёжность кода, улучшает автодополнение в IDE;</li>
50 <li>тесная связка с TypeScript, что повышает надёжность кода, улучшает автодополнение в IDE;</li>
51 <li>усиление поддержки модульных архитектур и монорепозиториев.</li>
51 <li>усиление поддержки модульных архитектур и монорепозиториев.</li>
52 </ul><p>Такие изменения делают технологию привлекательной не только для стартапов, но и для крупных компаний, которым важно быстро выпускать мобильные продукты, но при этом контролировать качество производительности.</p>
52 </ul><p>Такие изменения делают технологию привлекательной не только для стартапов, но и для крупных компаний, которым важно быстро выпускать мобильные продукты, но при этом контролировать качество производительности.</p>