React Native World – Telegram
React Native World
298 subscribers
57 photos
8 videos
2 files
73 links
Канал с авторскими статьями, обзорами и новостями из мира разработки на React Native.

Автор: Founder, Full-stack разработчик, с 2017 в React Native, разрабатываю проекты с миллионами пользователей

По всем вопросам: @kirilln0v
Download Telegram
С новым релизным циклом React Native старая архитектура скоро лишится поддержки

Подробнее о пути к RN 1.0, новой системе релизов и тестирования смотрите в видео

React Native World | Навигация по каналу
🔥6
Best Practices of using WebSockets

Планируете или уже используете WebSockets в своих приложения?

Эта статья поможет вам оптимизировать работу на стороне RN

Внутри вы найдете пример реализации Singleton WebSocket Service

Способы работы с reconnection

Offline Support и много других полезных приемов

React Native World | Навигация по каналу
🔥113
Читаю комментарии к PR в MMKV и узнаю от CTO Runna что самое популярное приложение для бега этого года все еще на старой архитектуре.

А вы уже перешли в своих приложениях на New Architecture?
Anonymous Poll
53%
Используем new arch
29%
Гоняем JSON по старинке
19%
Планируем миграцию
👍2🔥2
Если вам вдруг не зашел Liquid Glass то вот подробная инструкция как минимизировать его влияние на всех платформах от macOS и iOS до tvOS

React Native World | Навигация по каналу
🔥2
React Native Harness

Unit-тесты в React Native выполняются в среде Node.js, что ограничивает их возможности. Они не видят нативную часть приложения и не могут протестировать поведение модулей, зависящих от iOS/Android.

Можно, использовать E2E-тесты (Detox, Maestro), но их написание и поддержка обходятся дорого.

Например, если нужно протестировать работу нативного модуля, требуется пройти длинный путь в UI и процесс становится медленным и неудобным.

Команда Callstack предложила элегантное решение

React Native Harness - фреймворк, который позволяет запускать unit-тесты поверх реального приложения, прямо на симуляторе или устройстве.

Как это работает:

1️⃣ С помощью Babel-плагина собирается специальный JS-bundle, который вместо обычного UI запускает Harness Test Runner
2️⃣ Runner выполняет тесты с расширением harness
3️⃣ Результаты выполнения передаются в CLI в формате, совместимом с Jest reporter

Синтаксис написания тестов повторяет Jest, поэтому самое написание тестов не вызовет никаких проблем.

PS: 2-х часовое видео с live coding примерами написания и запуска тестов с помощью Harness

React Native World | Навигация по каналу
👍4🔥2
Render → Commit → Mount

Чтобы отрисовать JavaScript на нативной платформе, современный React Native проходит несколько фаз рендеринга от вычисления виртуального дерева до отображения UI-компонентов на экране.

В официальной документации этот процесс описан подробно,
но куда интереснее разобраться, как это работает под капотом.

В этом видео пошагово показано, как JS превращается в UI компоненты,
и на примерах из исходников React Native вы сможете увидеть,
где именно происходят фазы Render, Commit и Mount.

Это отличный способ глубже понять архитектуру RN и увидеть, как работают React Fiber, Fabric и JSI на практике.

React Native World | Навигация по каналу
🔥14
🚀 Ускоряем локальные билды React Native на 75%

В официальной документации React Native есть отличная страница с инструкциями, как ускорить локальные сборки.

Например, флаг --active-arch-only позволяет собирать Android-приложение только для одной архитектуры той, на которой вы тестируете, вместо всех четырёх.

На iOS, начиная с версии 0.80, можно включить Precompiled React Native for iOS, чтобы пропустить фазу сборки C++ исходников RN.

Иногда причина медленной сборки кроется не в самом React Native, а в сторонних библиотеках. Чтобы разобраться, что именно тормозит процесс, используйте этот гайд.

React Native World | Навигация по каналу
🔥7
AI-стартап Born, создающий приложения с виртуальными питомцами, выложил библиотеку для интеграции React Native с игровым движком Godot.

Библиотека react-native-godot позволяет запускать инстанс игрового движка с нужными параметрами и поддерживает вызовы API Godot из TypeScript/JavaScript.

Godot работает в отдельном потоке и не влияет на JavaScript-тред.

В репозитории есть папка с примером приложения и подробная инструкция по сборке и запуску.

React Native World | Навигация по каналу
🔥9👍2
‼️Критическая уязвимость в React Native CLI

В CLI есть пакет @react-native-community/cli-server-api, который используется для того, чтобы поднять локальный сервер Metro.

Проблема в том, что он слушает не только localhost, но и 0.0.0.0 и IPv6 [::], что делает его доступным в сети.

Вторая проблема, это open-url роут, который принимает JSON с полем url и передаёт его пакету open, который на Windows даёт полноценное выполнение команд, а на macOS/Linux запускает команды, но с более ограниченным контролем.

Комбинация этих двух уязвимостей даёт возможность удалённого запуска вредоносного кода.

Подробное описание уязвимости и способы пофиксить в статье.

React Native World | Навигация по каналу
1😢1
Craby - Type-safe Rust for React Native

React Native даёт удобный мост между JS и нативом в виде TurboModules, но ObjCTurboModule/JavaTurboModule обёртки добавляют накладные расходы.

Craby решает эту проблему, убирая промежуточные слои и подключая Rust напрямую к C++ TurboModule.

Craby автоматически генерирует Rust/C++ биндинги из TypeScript схем, минуя ObjCTurboModule и JavaTurboModule.

Результат почти нулевые накладные расходы, типобезопасность на этапе компиляции и C++ уровень производительности.

Когда стоит применять:

· Критические к производительности нативные модули (large-scale data processing, cryptographic operations, real-time parsing)

· Высокопроизводительно I/O с большим набором данных

Когда не стоит:

· Модули со специфичными для платформы зависимостями

· Модули которым нужны функции TurboModule такие как event emitters (их заменяют signals), platform context access

React Native World | Навигация по каналу
🔥4😁1🤔1
Memory Ownership Models

С переходом на новую архитектуру JSI становится основным транспортным уровнем между нативным и JS-слоем.

Но как именно устроен этот транспорт на нативной стороне? И с какими проблемами сталкиваются разработчики нативных модулей, когда пытаются использовать ArrayBuffer для обмена бинарными данными?

Эта статья краткое введение в то, как работает управление памятью между JavaScript и Native, и введение в RFC по поддержке ArrayBuffer в TurboModules.

React Native World | Навигация по каналу
🔥82👍2
Worklets мощный движок для многопоточности

JavaScript однопоточный, и это создает множество проблем с производительностью, особенно когда вам нужны тяжелые вычисления, например для анимаций.

Чтобы обойти эту особенность, команда Software Mansion в рамках библиотеки Reanimated придумала концепцию Worklets.

Помечая функции директивой worklet, специальный Babel-plugin трансформирует их так, чтобы эти же функции можно было запускать в отдельном JS-рантайме.

Это позволяет выполнять тяжелые вычисления в отдельном потоке, не блокируя основной JS-поток.

Сейчас библиотека Worklets становится самостоятельной, и обновленный API позволяет использовать её напрямую в ваших проектах.

Подробнее об эволюции библиотеки и будущих планах - в докладе с React Universe или в более техническом выступлении с митапа SWM.

React Native World | Навигация по каналу
6👍3🔥1
New DevTools

В RN 0.83 завезли новые инструменты разработчика которые помогут разобраться почему тормозит сгенерированный курсором ваш код

Подробнее об этом читайте в документации о React Performance tracks или посмотрите выступление Руслана на React Conf

DevTools можно попробовать и в более ранних версиях RN, но стабильность и работоспособность не гарантируется. Инструкция тут

React Native World | Навигация по каналу
👍4🔥21