В настоящее время я прохожу учебники React-Native. Я начал с учебного пособия "Приступая к работе", в котором я создал новый собственный проект реагирования и успешно смог запустить проект на своем устройстве.
Затем я запустил учебник Props, скопировал фрагмент кода и снова попытался запустить проект, и на моем экране появилось следующее сообщение об ошибке:
Я предполагаю, что это ошибка, вызванная несоответствием имени проекта и зарегистрированного компонента.
Вы включили проект с одним именем, т.е.
react-native init AwesomeApp
Но в вашем файле index.ios.js вы регистрируете другой компонент
AppRegistry.registerComponent('Bananas', () => Bananas);
Когда это должно быть
AppRegistry.registerComponent('AwesomeApp', () => Bananas);
Попробуйте исправить его.
В большинстве случаев проблема заключается в том, что у вас есть другой сервер react-native start
(например, React Native Packager), работающий либо на другом терминале, либо на другой вкладке TMUX (если вы используете TMUX).
Вам нужно найти этот процесс и закрыть его, поэтому, например, после запуска react-native run-ios
он установит новый сервер упаковщика, зарегистрированный для этого конкретного приложения.
Просто найдите этот процесс, используя:
ps aux | grep react-native
найти идентификатор процесса (PID) и убить процесс упаковщика с помощью команды kill
(например, kill -9 [PID]
). Вы должны найти приложение launchPackager.command
в macOS, не уверены в других операционных системах.
Затем попробуйте снова запустить run-ios
(или android). Вы должны увидеть новый путь после запуска нового сервера упаковщика, например:
Looking for JS files in
/Users/afshin/Desktop/awesome-app
react-native start --port <otherport>
, я должен запустить react-native start --port <otherport>
react-native run-<platform>
по-другому ?, спасибо
Измените MainActivity
следующим образом:
@Override
protected String getMainComponentName() {
return "Bananas"; // here
}
Прежде всего, вы должны запустить свое приложение:
react-native start
Затем вы должны установить имя своего приложения в качестве первого аргумента registerComponent.
Он отлично работает.
AppRegistry.registerComponent('YourProjectName', () => YourComponentName);
Мое решение - изменить имя модуля в "AppDelegate.m"
из moduleName:@"AwesomeProject"
to moduleName:@"YourNewProjectName"
В моем случае есть эта строка в MainActivity.java, которая была пропущена, когда я использовал response react-native-rename
cli (из NPM)
protected String getMainComponentName() {
return "AwesomeApp";
}
Очевидно, вы должны переименовать его в название вашего приложения.
У меня была одна и та же проблема, и для меня основной причиной было то, что я запускал (реагировать на собственный запуск) упаковщик из другой связанной с пользователем папки (AwesomeApp), в то время как я создал другой проект в другой папке.
Запуск пакета из нового каталога приложений разрешил его.
Пожалуйста, проверьте ваш файл app.json в проекте. если нет строки appKey, то вы должны добавить ее
{
"expo": {
"sdkVersion": "27.0.0",
"appKey": "mydojo"
},
"name": "mydojo",
"displayName": "mydojo"
}
Я думаю, что сервер узла работает из другой папки. Так что убей его и запусти в текущей папке.
Найти работающий узел сервера: -
lsof -i :8081
Убить работающий узел сервера: -
kill -9 <PID>
Например:-
kill -9 1653
Запустить сервер узла из текущей собственной исходной папки: -
react-native run-android
Эта проблема также появится, когда в index.js вы назвали приложение не так, как вы назвали его для пакета android/ios; возможно, это произошло, когда вы выбросили приложение. Поэтому убедитесь, что при вызове AppRegistry.registerComponent('someappname',() => App)
someappname также используется для собственных пакетов или наоборот.
Все приведенные ответы не спомогли мне.
У меня был другой процесс узла, запущенный в другом терминале, я закрыл этот командный терминал, и все работало как ожидалось.
Это также может быть связано с тем, что имя корневого компонента начинается с нижнего регистра.
Восстановите его или скорее создайте проект еще раз с именем PascalCase.
например. зажечь новый HelloWord
вам нужно зарегистрировать его в index.android.js/index.ios.js
как это:
'use strict';
import {
AppRegistry
} from 'react-native';
import app from "./app";
AppRegistry.registerComponent('test', () => app);
Для меня ни один из ответов не сработал.
Я выяснил, где проблема в моем случае (ОС Windows 10), но это может также помочь в Linux (вы можете попробовать).
В windows power shell
, когда вы хотите запустить приложение (первый раз после загрузки ПК), выполнив следующую команду,
react-native run-android
Он запускает node process/JS server
на другой console panel
, и вы не столкнетесь с этой ошибкой. Но, когда вы хотите запустить другое приложение, вы должны необходимо закрыть, что уже работает JS server console panel
. А затем выполните ту же команду для другого приложения из power shell
, эта команда автоматически запустит другой новый сервер JS для этого приложения, и вы не столкнетесь с этой ошибкой.
Вам не нужно закрывать и снова открывать power shell
для запуска другого приложения, вам нужно закрыть node console
чтобы запустить другое приложение.
У меня такая же проблема. Я использовал Windows для создания собственного приложения для Android, и у меня была та же ошибка. Вот что сработало.
sdk.dir = C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ \ AppData\Local\Android\sdk
Сохраните и запустите приложение в обычном режиме. Это сработало для меня.
Ни одно из решений не сработало для меня. Я должен был убить следующий процесс и перезапустить реакционный родной запуск Android, и это сработало.
начало узла. /local-cli/cli.js
Вместо изменения имени в AppRegistry
,
Запустите action-native init Bananas, это создаст реактивный шаблонный код для проекта Bananas, а AppRegistry.registerComponent
автоматически укажет на бананы
AppRegistry.registerComponent('Bananas', () => Bananas);