Загружать пользовательский собственный компонент в соответствии с нативным с помощью набора экспонатов

Я пытаюсь загрузить пользовательский 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/