Пытался зарегистрировать два представления с одинаковым именем 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
уже существует в Экспо, и Экспо запутывается в том, откуда взять информацию.
Чтобы решить вашу проблему, сделайте следующее.
- Закройте все работающие терминалы
Expo
- Закройте запущенное окно браузера
Expo
- Очистите проект, над которым вы работали, с
Expo
приложение на вашем устройстве. - Удалить свой
package-lock.json
- Удалить свой
node_modules
папка - Удалить
react-native-gesture-handler
вход от вашегоpackage.json
- Бежать
npm i
- Запустить снова
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 и имел ту же проблему.
Я попытался:
rm -rf node_modules && npm install
без везения.- Удаление
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 не понимает, откуда брать информацию.
как это исправить:
Остановить сервер (ctrl+c)
Запустите это на своем терминале:
npm удалить реакцию-родной-жест-обработчик
Затем перезапустите сервер, используя npm start
У меня выставочный проект
Кажется, проблема была в контексте реакции-родной-безопасной-области
Все, что я сделал, было
yarn add react-native safe area context
и это сработало (я уже установил его, но я думаю, что Yarn решил для меня некоторые другие проблемы)