Ответ вслух Middle Нативные модули обновлено

Как вы напишете нативный модуль

Вопрос

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

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала проверю, нет ли готового: в Expo есть expo-battery, и писать своё не нужно. Если всё же нужен свой модуль, описываю контракт на TypeScript: getLevel(): Promise<number и событие onPowerModeChange.

Что должно прозвучать в ответе

  • Сначала поиск готовой библиотеки (например, в Expo SDK)

  • Спецификация: `getLevel(): Promise<number>`, событие о режиме энергосбережения

  • TurboModule с Codegen или Expo Modules API

  • Реализация на Kotlin и Swift, работа в фоне, ответ через Promise

  • Подписка на события с `remove()` в очистке эффекта

  • Обработка ошибок и платформенных различий

Что могут спросить следом

  • Почему getLevel асинхронный?
  • Как протестировать JS-часть без устройства?

Разбор

Образцовый ответ: «Сначала проверю, нет ли готового: в Expo есть expo-battery, и писать своё не нужно. Если всё же нужен свой модуль, описываю контракт на TypeScript: getLevel(): Promise<number> и событие onPowerModeChange. Дальше либо TurboModule со спецификацией и Codegen, либо Expo Modules API, где на Swift и Kotlin модуль описывается декларативно, это обычно быстрее. На Android читаю BatteryManager и слушаю системный broadcast, на iOS UIDevice и уведомление о режиме энергосбережения. Метод асинхронный, чтобы не блокировать JS. В JS даю хук usePowerMode, который подписывается в useEffect и вызывает remove() в очистке. Модуль в тестах мокаю через jest.mock»

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.