React Native Android: представление прыгающего свитка - PullRequest
1 голос
/ 30 марта 2020

Я знаю, что обычный просмотр прокрутки на Android не отказов, но я хочу эту функциональность. Я пытаюсь использовать пакет SpringScrollView , но когда я заменяю свои <ScrollView> компоненты на <SpringScrollView>, я получаю сообщение об ошибке

Requiring unknown module "94". If you are sure the module exists, try restarting Metro. You may also want to run 'yarn' or 'npm install'.

Я не совсем понимаю, что такое Metro, но если я просто закрою приложение и перезапущу его, используя yarn install, я получу ту же ошибку


Обновление

У меня возникнут проблемы с инструкция по установке в документации когда я приеду на часть для MainApplication. java. В документации указано, что моя функция getPackages () должна быть изменена на

@Override
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
      new SpringScrollViewPackage()
  );
}

Моя функция getPackages для моего MainApplication. java выглядела немного иначе

    @Override
    protected List<ReactPackage> getPackages() {
      List<ReactPackage> packages = new PackageList(this).getPackages();
      packages.add(
        new ModuleRegistryAdapter(mModuleRegistryProvider)
      );
      return packages;
    }

Поэтому я попытался изменить это будет

    @Override
    protected List<ReactPackage> getPackages() {
      List<ReactPackage> packages = new PackageList(this).getPackages();
      packages.add(
        new ModuleRegistryAdapter(mModuleRegistryProvider)
      );
      packages.add(new SpringScrollViewPackage());
      return packages;
    }

Но когда я делаю это, я получаю эту ошибку при сборке

error: cannot find symbol
      packages.add(new SpringScrollViewPackage());
                       ^
  symbol: class SpringScrollViewPackage
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

Я также пытался установить версию, которая была 0. *, потому что это выглядит как Необычные инструкции предназначены только для версий 2. *, но когда я делаю это и использую SpringScrollView, я получаю сообщение об ошибке типа

"You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports"

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

Над функцией getPackages, которую вы разместили:

 @Override
    protected List<ReactPackage> getPackages() {
      List<ReactPackage> packages = new PackageList(this).getPackages();
      packages.add(
        new ModuleRegistryAdapter(mModuleRegistryProvider)
      );
      return packages;
 }

Может появиться новый объект ReactModuleRegistryProvider. Попробуйте добавить туда свой пакет.

private final ReactModuleRegistryProvider mModuleRegistryProvider = new ReactModuleRegistryProvider(Arrays.<Package>asList(
    new SpringScrollViewPackage(),  // add this line there
), Arrays.<SingletonModule>asList());```
0 голосов
/ 07 апреля 2020

Вы не "связали" библиотеку с проектом android. В отличие от реальных библиотек JVM, которые автоматически добавляются в путь проекта менеджером зависимостей, реактивные «библиотеки» копируют целые подпроекты android в node_modules, которые затем необходимо добавить в файл settings.gradle приложения android и собрать .gradle. В вашем проекте должен быть android / settings.gradle, куда вам нужно добавить что-то вроде

include ':SpringScrollView'
project(':SpringScrollView').projectDir = new File(rootProject.projectDir, '../src/base/SpringScrollView/android')

Затем в файле android / app / build.gradle что-то вроде:

implementation project(':SpringScrollView')

Затем к пути будет добавлена ​​«библиотека», и там будут классы (предполагается, что SpringScrollView - это имя папки библиотеки внутри node_modules).

удачи и терпения. Вам понадобится это с RN.

0 голосов
/ 03 апреля 2020

MetroBundler связывает приложение для вас, чтобы вы могли запустить / отладить его. Возможно, что вокруг есть какие-то старые файлы кэша или устаревшие файлы.

В большинстве случаев нелегко сказать, в чем конкретно проблема с метро, ​​но, на мой взгляд, очень часто помогают следующие шаги:

(Обратите внимание, это для Linux пользователей ... если вы используйте Windows, замените одиночные команды внутри вашей os-командой)

Добавьте эти строки в ваш пакет. json - scripts-Section, чтобы иметь возможность запускать его всякий раз, когда вы например:

"kill_MetroBundler": "lsof -i :8081 | grep node | awk '{print $2}'| head -1 | xargs kill",
"clean-start": "rm -rf ./node_modules && yarn install && watchman watch-del-all && rm -rf $TMPDIR/haste-map-react-native-packager-* && rm -rf $TMPDIR/metro-bundler-cache-* && rm -rf $TMPDIR/react-*",

Поэтому я рекомендую сначала найти и уничтожить все процессы metroBundler. Моя команда поиска с lsof для Служб, работающих на порту 8081, и после передачи по трубопроводу некоторым процессам (чтобы получить необходимое имя программы) выполнила для нее kill, чтобы принудительно закрыть процесс.

После этого вы также должны запустить clean-start, который удалит вашу директорию node_module, переустановит модули, убьет всех сторожей и процессов chaple bundler & packager.

Иногда, в действительно сложных случаях, это также не Работа. Здесь я выяснил, что, возможно, потребуется заново создать файл-пакет для Android:

"RN_Bundle": "react-native bundle --platform android --dev false --reset-cache --entry-file index.js --bundle-output android/build/generated/assets/react/release/index.android.bundle --assets-dest android/build/generated/res/react/release",

Если вы используете эту команду, я рекомендую следующий порядок:

  1. kill_MetroBundler
  2. clean-start
  3. RN_Bundle

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

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...