Пытался зарегистрировать два представления с одинаковым именем RNGestureHandlerButton

Я пытаюсь создать навигацию с помощью { createStackNavigator, createAppContainer } из реагирующей навигации, но когда я запускаю свое приложение, я всегда получаю сообщение об ошибке

Я много чего пробую и не нахожу никакой документации / помощи по этому вопросу.

Это мое package.json

{ 
  "main": "node_modules/expo/AppEntry.js", 
  "scripts": { 
    "start": "expo start", 
    "android": "expo start --android", 
    "ios": "expo start --ios", 
    "eject": "expo eject" 
    }, 
  "dependencies": { 
    "expo": "^32.0.0", 
    "react": "16.5.0", 
    "react-native": "github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
     "react-native-gesture-handler": "^1.0.15", 
    "react-navigation": "^3.0.9" 
    }, 
  "devDependencies": { 
    "babel-preset-expo": "^5.0.0" 
    }, 
  "private": true 
}

14 ответов

Решение

Причиной вашей ошибки является то, что вы используете react-navigation в приложении Expo, однако вы неправильно следовали инструкциям.

https://reactnavigation.org/docs/en/getting-started.html

Если вы прочитаете инструкцию, она сообщит вам, что после установки react-navigation вам следует установить react-native-gesture-handler, Однако это не то, что они говорят

Затем установите обработчик реакции-родного-жеста. Если вы используете Expo, вам не нужно ничего делать здесь, это включено в SDK.

Это говорит о том, что если вы используете Expo вам не нужно устанавливать react-native-gesture-handler как это уже установлено.

Вы получаете ошибки, потому что вы установили react-native-gesture-handlerуже существует в Экспо, и Экспо запутывается в том, откуда взять информацию.

Чтобы решить вашу проблему, сделайте следующее.

  1. Закройте все работающие терминалы Expo
  2. Закройте запущенное окно браузера Expo
  3. Очистите проект, над которым вы работали, с Expo приложение на вашем устройстве.
  4. Удалить свой package-lock.json
  5. Удалить свой node_modules папка
  6. Удалить react-native-gesture-handler вход от вашего package.json
  7. Бежать npm i
  8. Запустить снова Expo с помощью expo start -c

Будьте осторожны при использовании Expo легко установить зависимости, которые не могут работать с ним, и вызвать такие проблемы.

Для всех, кто попадает сюда и ищет:
"Невозможно разрешить" response-native-gesture-handler "из"node_modules@response-navigation\native\src\Scrollables.js""

Я нашел ответ здесь:
https://github.com/expo/expo/issues/5107

Если вы используете Expo SDK 34+, несмотря на то, что говорят старые потоки, вам нужно запустить следующее, чтобы заставить его работать:
expo install react-native-gesture-handler

Существует конфликт между установленным пакетом обработчика жестов реакции и другим, вызванным как зависимость от другого установленного пакета, эти два пакета определенно являются разными версиями.

Решение?Перейдите к вашему package-lock.json и найдите экземпляры react-native-gesture-handler. Найдите тот, который вытащил как зависимость другого пакета, то есть в моем случае:

       node_modules/@rainbow-me/animated-charts/node_modules/react-native-gesture-handler": {
       3027       "version": "1.10.3",
 "}

Это вытягивал оскорбительный пакет react-native-gesture-handler. Перейдите в node_modules и удалите эту версию обработчика жестов, а затем перезапустите сервер.

Если вы НЕ используете expo и видели эту ошибку, возможно, вы используете компонент, который возвращает TouchableOpacity. Вы можете получить ту же ошибку, и также произойдет объединение нескольких скриптов. Чтобы исправить это, оберните TouchableOpacity внутри View.

Итак, я использую expo SDK32 и имел ту же проблему.

Я попытался:

  1. rm -rf node_modules && npm install без везения.
  2. Удаление react-native-gesture-handler от твоего package.json и делаю rm -rf node_modules && npm install не повезло...

Я добился успеха, убедившись, что моя версия react-native-gesture-handler разрешал только исправления изменений в семвере.

старая строка package.json (при возникновении ошибки столкновения имен):

"react-native-gesture-handler": "^1.0.12",

(The ^ здесь сообщает npm, чтобы перейти к наивысшей младшей версии, которая установлена. 1.4.1)

новая строка package.json (исправлена ​​ошибка для меня):

"react-native-gesture-handler": "~1.0.12",

(The ~ здесь сообщает npm, что нужно использовать только самую высокую версию патча, которая установлена 1.0.17 и ошибка исчезла)

Я предполагаю, что произошло какое-то столкновение с разными второстепенными версиями?

Я думаю, это то, о чем говорил @feihcsim в своем ответе.

Исходя из ответа @ Эндрю, проблема иногда может быть даже немного тоньше, чем посторонняя ручная установка react-native-gesture-handler: для меня я узнал, что пакет, который я недавно обновил, включал их собственную копию react-native-gesture-handler как зависимость (выясняется путем поиска через мой yarn.lock, package-lock.json, node_modulesи т. д.) - поэтому мне пришлось понизить этот пакет до версии, которая не зависела от react-native-gesture-handler..

Я не использую expo, и у меня была такая же проблема. Я исправил это, зайдя в свой файл "package-lock.json", нашел "response-native-gesture-handler" и удалил весь пакет с зависимостями. После этого в папке node_modules я удалил папку с именем "response-native-gesture-handler". теперь у меня работает npm install response-native-gesture-handler.

Для выставки попробуйте это:

expo install react-native-safe-area-context
пряжа или npm install

Для приложений , не относящихся к Expo , вышеприведенное решение действительно работает. Итак, для приложений, поддерживающих реакцию, созданных в ANDROID Studio, вот решение: -

  • Замените свою версию зависимостей, связанных с реагированием, на ее последнюю версию, которая на данный момент является последней - 2.1.1, которая дает эту ошибку, замените ее этой ссылкой - версия"https://github.com/xcarpentier/react-native-linkedin.git"вместе с необходимыми изменениями.
  • Удалите и переустановите node_module.
  • После установки либо вручную удалите папку WEBVIEW из " react -native-connected" в node_module, либо напишите следующую строку в своем скрипте в файле package.json: "postinstall": "npx jetifier; patch-package; rm -rf ./node_modules/react-native-linkedin/node_modules/react-native-webview", после клавиши "старт".

Я использую expo 45 и, как я вижу в документах , мне нужно запустить

expo install react-native-gesture-handler,

затем добавьтеimport 'react-native-gesture-handler';вApp.jsа затем я могу импортировать и использовать его где угодно, например:

      import { TapGestureHandler, RotationGestureHandler } from 'react-native-gesture-handler';

class ComponentName extends Component {
  render() {
    return (
      <TapGestureHandler>
        <RotationGestureHandler>...</RotationGestureHandler>
      </TapGestureHandler>
    );
  }
}

Если вы используете Expo для создания собственного приложения для реагирования, вам не нужно импортировать response-native-gesture-handler из npm или yarn. Он уже есть в экспо-упаковке. Если вы импортируете пакет, вы столкнетесь с этой ошибкой.

Еще одно решение для @rainbow-me/animated-charts

Перейдите в package-lock.json и посмотрите версию обработчика жестов.


"node_modules/@rainbow-me/animated-charts": { . . . «зависимости»: { «реагировать-родной-жест-обработчик»: «^ 1.7.0», },


затем перейдите в package.json и замените версию «зависимости»: { . . . "реагирующий-родной-жест-обработчик": "1.7.0" },

В терминале проблема с обновлением npm

Это то, что сработало для меня после того, как я столкнулся с этой ошибкой.

Вы получаете ошибки, потому что вы установили react-native-gesture-handler, он уже существует в Expo, и Expo не понимает, откуда брать информацию.

как это исправить:

  1. Остановить сервер (ctrl+c)

  2. Запустите это на своем терминале:

    npm удалить реакцию-родной-жест-обработчик

  3. Затем перезапустите сервер, используя npm start

У меня выставочный проект

Кажется, проблема была в контексте реакции-родной-безопасной-области

Все, что я сделал, было

      yarn add react-native safe area context

и это сработало (я уже установил его, но я думаю, что Yarn решил для меня некоторые другие проблемы)

Другие вопросы по тегам