React-Native: в приложении не было зарегистрировано ошибки

166

В настоящее время я прохожу учебники React-Native. Я начал с учебного пособия «Приступая к работе», в котором я создал новый собственный реактивный проект и успешно запустил его на своем устройстве.

Затем я запустил учебник Props , скопировал фрагмент кода и снова попытался запустить проект, и на моем экране появилось следующее сообщение об ошибке:

Адам
источник
Можете ли вы поделиться своим кодом?
Джагадиш Упадхьяй

Ответы:

435

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

Вы инициировали проект с одним именем, т.е.

react-native init AwesomeApp

Но в вашем файле index.ios.js вы регистрируете другой компонент

AppRegistry.registerComponent('Bananas', () => Bananas);

Когда это должно быть

AppRegistry.registerComponent('AwesomeApp', () => Bananas);

Попробуйте это исправить.

Slowyn
источник
7
"Бананы" кое-как работают на андроид. Но это не на IOS.
Сумит Кушваха
92
Для кого-то, кто сталкивается с той же проблемой, даже если имя компонента совпадает -> Убедитесь, что у вас не запущен какой-либо другой реактивный процесс / процесс узла в другом терминале.
Nilesh
1
по моему опыту, перезагрузка системы сортировала вещи ... как бы странно это ни звучало.
Кайот
В настоящее время учебник называется «AwesomeProject»
AdamG,
2
и для людей, которые хотят бананы вместо AwesomeApp, могут изменить moduleName:@"AwesemeApp"строку в своем файле
AppDelegate.m
42

В большинстве случаев проблема заключается в том, что у вас есть другой 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 run-<platform>по-другому?, Спасибо
Себастьян Пальма
@ SebastiánPalma Насколько я знаю, startкоманда запускает сервер упаковщика, поэтому, если вы уже скомпилировали свое приложение, выполнять это не нужно run-<platform>.
Афшин Мехрабани
32

Изменить, MainActivityкак это,

@Override
protected String getMainComponentName() {
    return "Bananas"; // here
}
Данияр Самумбаев
источник
2
ИМЕННО! это было именно то, что было моей проблемой, хотя вместо того, чтобы изменить это, я изменил AppRegistry.registerComponent к этому
Sijav
что насчет Иоса?
Динеш Раджпут
+1. Меня удивляет, почему CLI спрашивает, хочу ли я дать версии android / ios другое имя, когда это приведет только к тому, что мой проект не будет работать, и мне придется изменить его обратно.
Коснитесь
Я изменил app.js
ролл
28

Мое решение - изменить имя модуля в "AppDelegate.m"

из moduleName:@"AwesomeProject"

в moduleName:@"YourNewProjectName"

user8637708
источник
Это исправило мою проблему. Спасибо!
Кори МакЭбой
У меня работал симулятор iOS от React Native!
Эмилио
Да, это помогает мне. Дополнительный совет: если вы используете XCode, убедитесь, что вы установили правильное имя для вашего имени приложения (Project -> Target -> DisplayName)
позднее
17

Прежде всего, вы должны запустить приложение:

react-native start

Затем вы должны установить имя вашего приложения в качестве первого аргумента registerComponent.

Работает нормально.

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);
Рафаэль Ферраро
источник
8

Пожалуйста, проверьте ваш файл app.json в проекте. если нет строки appKey, то вы должны добавить ее

{
  "expo": {
    "sdkVersion": "27.0.0",
    "appKey": "mydojo"
  },
  "name": "mydojo",
  "displayName": "mydojo"
}
mperk
источник
3
Вмешивался в эту ошибку последние 24 часа. Это исправило мою проблему. Спасибо!
Balaji Kartheeswaran
7

В моем случае есть такая строка в MainActivity.java, которая была пропущена, когда я использовал react-native-renamecli (из NPM)

protected String getMainComponentName() {
    return "AwesomeApp";
}

Очевидно, вы должны переименовать его на имя вашего приложения.

xemasiv
источник
4

Я думаю, что сервер узла работает из другой папки. Так что убей его и запусти в текущей папке.

Найти работающий сервер узла: -

lsof -i :8081

Убить работающий узел сервера: -

kill -9 <PID>

Например:-

kill -9 1653

Запустить сервер узла из текущей собственной исходной папки: -

react-native run-android

Аршид К.В.
источник
3

У меня была та же проблема, и для меня основной причиной было то, что я запустил (реактивный запуск) упаковщик из другой реактивной папки (AwesomeApp), в то время как я создал другой проект в другой папке.

Запуск упаковщика из каталога нового приложения решил эту проблему.

la5zl0
источник
1

Это также может быть связано с тем, что имя корневого компонента начинается со строчной буквы.

Исправьте его или, скорее, создайте проект еще раз с именем PascalCase.

например, зажечь новый HelloWord

Venkat
источник
1

Все приведенные ответы у меня не сработали.

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

Khemraj
источник
1

вам нужно зарегистрировать его в index.android.js / index.ios.js

как это:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

AppRegistry.registerComponent('test', () => app);
linSir
источник
1

Я решил эту проблему, изменив следующее в файле app.json. Похоже, заглавная буква выбрасывала эту ошибку.

Из:

{
  "name": "Nameofmyapp",
  ...
}

Для того, чтобы:

{
  "name": "nameofmyapp",
  ...
}
Алекс Сарновски
источник
0

Вместо того , чтобы изменить имя в AppRegistry,

Запустите реактивный init бананы, это создаст стандартный код реакции для проекта бананов и AppRegistry.registerComponentавтоматически укажет на бананы

AppRegistry.registerComponent('Bananas', () => Bananas);
Vipul Srivastav
источник
0

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

начало узла ./local-cli/cli.js

Г. Табит
источник
1
какие последующие процессы?
bigmadwolf
@bigmadwolf узел ./local-cli/cli.js начало
Г. Табит
0

У меня такая же проблема. Я использовал Windows для создания собственного приложения для Android, и у меня была та же ошибка. Вот что сработало.

  • Перейдите к папке ANDROID в вашем корне.
  • Создайте файл с именем: local.properties
  • Откройте его в редакторе и напишите:

sdk.dir = C: \ Users \ USERNAME \ AppData \ Local \ Android \ SDK

  • Замените USERNAME на имя вашей машины.

Сохраните и запустите приложение в обычном режиме. Это сработало для меня.

Утсав Чавла
источник
0

Эта проблема также появится, когда в index.js вы назвали приложение не так, как вы назвали его для пакета android / ios ; вероятно, это произошло, когда вы выбросили приложение. Поэтому убедитесь, что при вызове AppRegistry.registerComponent('someappname', () => App)someappname также используется для собственных пакетов или наоборот.

Габриэль П.
источник
0

Я выяснил, где проблема в моем случае (ОС 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 для запуска другого приложения.

Шамсул Арефин Саджиб
источник
0

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

В моем случае:

response-native-cli: 2.0.1

реактивный: 0.60.4

и следующая структура:

введите описание изображения здесь

Прежде всего следует отметить, что index.android не обновлялся в Android Studio при сборке, выполняемой сборщиком Metro (response-native run-android), поэтому это нужно делать вручную. Также в Android studio не «читает»

app.json (создается по умолчанию вместе с index.js, который переименован в index.android.js):

 {
    "name": "authApp",
    "displayName": "authApp"
 }

и так это как

(в моем случае)

import {authApp as appName} from './app.json';

причина в том, что андроид студия не знает, на что ссылается authApp. Я исправлю на данный момент ссылку на имя приложения с его строковым именем и не использую этот импорт из app.json:

AppRegistry.registerComponent('authApp', () => MyApp);
Кармин Тамбаския
источник
0

Это решило это для меня

AppRegistry.registerComponent('main', () => App);

Итак, мой index.jsфайл

import { AppRegistry } from 'react-native';
import App from './App';
AppRegistry.registerComponent('main', () => App);

И мой package.jsonфайл:

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},
Бабаджид М. Мойби
источник
0

Это решение сработало для меня после 2 дней отладки. Изменить это:

AppRegistry.registerComponent('AppName', () => App);

в

AppRegistry.registerComponent('main', () => App);
agerxs
источник