#android #react-native
Вопрос:
У меня есть приложение среднего размера для Android и iOS, которое в настоящее время разрабатывается соответственно на Android Native (Java) и iOS Native (Swift). Я приближаюсь к React Native, чтобы использовать его для совместного использования некоторого кода между двумя приложениями, поскольку я не могу позволить себе переделать весь проект в React Native за один раз.
План состоит в том, чтобы начать с нескольких классов: менеджера, который обращается ко всем нашим конечным точкам, некоторым менеджерам, некоторым типам данных. Я пока не хочу делиться view, потому что они ИСПОЛЬЗУЮТ этот общий код, и мне пришлось бы поддерживать этих менеджеров в трех проектах.
Есть ли способ получить доступ к классам React Native, которые не являются представлениями (Android Activities / iOS ViewControllers), к Android Native?
Я пытался https://reactnative.dev/docs/integration-with-existing-apps и это работает, но это выглядит как прославленный WebView, где код в React Native скрыт. Если в машинном коде React у меня был какой-то простой класс, например:
import React from 'react';
import type {Node} from 'react';
class Adder {
add = (value) => {
return value 10;
}
}
export default Adder;
могу ли я каким-либо образом вызвать этот код на Java? :
int value = new Adder().add(1); // Value == 11
Я использую неправильный инструмент для решения этой проблемы?
Ответ №1:
После некоторого опыта работы с расширениями (iOS) и Activities (Android) Я думаю, что ваше намерение на самом деле не подходит для React Native. React Native всегда основан на экране, ViewController в iOS и Activity в Android. Весь жизненный цикл React Native находится внутри этого экрана, и RN заботится о отображении содержимого. Когда вы находитесь внутри экрана RN, вы можете использовать все свои собственные функции с модулями и вызывать RN с собственной стороны. Уже сложно получить возвращаемое значение из вызова из native в RN (а не наоборот), поэтому ваш способ его интеграции, вероятно, затруднит его для вас, даже если вы обойдете всю логику отображения экрана.
Имея в виду эту идею, вы можете легко заменить отдельные экраны в своем приложении на (новый) экран RN. Вы вызываете их с помощью startActivity (Android) или presentViewController и тому подобное (iOS) и помещаете всю соответствующую логику в RN с возможным взаимодействием с некоторым старым машинным кодом.