Загружать пользовательский собственный компонент в соответствии с нативным с помощью набора экспонатов
Я пытаюсь загрузить пользовательский Android WebView, чтобы иметь возможность загружать файлы с помощью входов файлов html (по умолчанию Android-просмотр Android не работает с входным файлом). Я использую этот код, единственное отличие заключается в том, что im использует комплект expo, поэтому мой MainApplication.java отличается (наследуется от другого класса по умолчанию):
public class MainApplication extends MultiDexApplication {
// Needed for `react-native link`
public List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CustomWebViewPackage()
);
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}
В основном то, что делает код git, переопределяет встроенный веб-просмотр по умолчанию, чтобы заставить его использовать CustomWebView.java в Android, используя requireNativeComponent с этим кодом (это на CustomWebView.android.js):
var RCTWebView = requireNativeComponent('CustomWebView', WebView, {
nativeOnly: {
messagingEnabled: PropTypes.bool,
},
});
Но когда я запустил приложение, используя start start, и перейдите к экрану с CustomWebView, я получаю эту ошибку:
![введите описание изображения здесь]()
Подводя итог, проблема заключается в том, что мой пользовательский компонент не читается React Native. Может кто-нибудь мне помочь?
Ответы
Ответ 1
Экспо по умолчанию не будет поддерживать какие-либо настраиваемые собственные модули. Это потому, что у них есть один встроенный двоичный файл, и они загружают только набор JS, который вы пишете. Поэтому любой код, который вы пишете с помощью Expo, может быть только чистым Javascript.
Однако в документации Expo действительно говорится, что после отсоединения вы можете добавлять собственные собственные модули.
Подробнее здесь:
https://docs.expo.io/versions/latest/guides/detach.html#should-i-detach
https://docs.expo.io/versions/latest/introduction/faq.html#what-is-the-difference-between-expo-and-react-native
https://github.com/expo/expo/issues/56
Ответ 2
Вы не можете использовать собственный код при использовании expo, вы можете использовать только то, что они вам дают. Извлечение позволит вам использовать собственный код, но затем вы больше не можете использовать expo, и я уверен, что он необратим.
Подробнее о предостережениях использования expo вы можете узнать здесь: https://facebook.github.io/react-native/docs/getting-started.html#caveats
Ответ 3
Вы можете начать с лучшего генератора кода для React Native
Известный как Ignite, он очень прост в использовании, он имеет несколько BoilerPlates.
Из приведенных полезных шаблонов вы можете использовать Ignite Expo BoilerPlate, который настроит весь код с поддержкой exo + native. После установки ignite-cli
в качестве глобального пакета и запуска ignite new [AppName] -b ignite-expo
Итак, это будет легким шагом для вас. Также он добавляет некоторые полезные другие модули.
Ответ 4
После извлечения проекта попытка использовать его с помощью exp start
не даст вам результата, которого вы хотите достичь. Пока набор экспонатов по-прежнему поддерживается, вам теперь нужен новый собственный код, поэтому вам нужно запустить его с помощью react-native run-android
. Когда вы это сделаете, он будет не только обслуживать JS как exp start
, но и скомпилировать ваш собственный код и поместить его на свое устройство.
В настоящее время использование exp start
обслуживает пакет JS, однако указанный пакет не может найти ваш собственный модуль, поскольку он не существует в общем клиентском экземпляре.
Ответ 5
Как сказано в предыдущих ответах, модули expo и native не идут рука об руку. Поскольку expo предоставляет только возможность редактировать код JavaScript, а не собственные модули, собственные модули можно рассматривать как черный ящик на выставке.
Но если вы пытаетесь интегрировать нативные модули в expo или пытаетесь одновременно запустить и expo, и собственный неродной модуль. Вот очень интересное прочтение https://codersera.com/blog/running-expo-react-native-together/