React-Native: У програмі не було зареєстровано помилок


166

Зараз я проходжу підручники "Реактивні сили". Я почав з підручника «Початок роботи», де я створив новий власний проект реагування та успішно впорався з проектом на своєму пристрої.

Потім я розпочав підручник з реквізиту , скопіював фрагмент коду і спробував запустити проект ще раз, і на моєму екрані з’явилося таке повідомлення про помилку:


Чи можете ви поділитися своїм кодом?
Jagadish Upadhyay

Відповіді:


435

Я думаю, що це помилка, викликана не узгодженням назви проекту та зареєстрованого компонента.

Ви запросили проект з одним ім’ям, тобто

react-native init AwesomeApp

Але у файлі index.ios.js ви реєструєте інший компонент

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

Коли це має бути

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

Спробуйте це виправити.


7
"Банани" десь як працюють на андроїд. Але це не на IOS.
Суміт Кушваха

92
Для тих, хто стикається з тією ж проблемою, навіть якщо ім'я компонента збігається -> Переконайтеся, що у вас немає жодного іншого процесу реакції нативної / вузлової системи, який працює в іншому терміналі.
Нілеш

1
з мого досвіду, перезавантаження системи сортувало речі ... як не дивно, як це звучить.
Кайоте

Навчальний посібник наразі називається "AwesomeProject"
AdamG

2
а люди, які хочуть бананів замість AwesomeApp, можуть змінити moduleName:@"AwesemeApp"рядок у своєму файлі AppDelegate.m
Aequitas

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

що з Іосом?
Dinesh R Rajput

+1. Змушує мене замислитися, чому CLI запитує, чи хочу я надати версії для android / ios інше ім’я, коли це призведе лише до того, що мій проект не працює, і мені доведеться його змінити.
Торкніться

Я змінив app.js
ролик

28

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

з moduleName:@"AwesomeProject"

до moduleName:@"YourNewProjectName"


Це вирішило мою проблему. Дякую!
Кори МакАбой

Для мене працював 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"
}

3
Мінували з цією помилкою протягом останніх 24 годин. Це вирішило мою проблему. Дякую!
Баладжі Картхесваран

7

У моєму випадку в MainActivity.java є цей рядок, який був пропущений, коли я використовував react-native-renamecli (з NPM)

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

Очевидно, що ви повинні перейменувати його на ім’я свого додатка.


4

Я думаю, що сервер вузлів працює з іншої папки. Тому вбийте його та запустіть у поточній папці.

Знайти запущений сервер вузлів: -

lsof -i :8081

Вбивство запущеного сервера вузлів: -

kill -9 <PID>

Напр .: -

kill -9 1653

Запустити сервер вузлів із поточної рідної папки реагування: -

react-native run-android


3

У мене була така ж проблема, і для мене першопричиною було те, що я запустив (реагує на натиск) пакувальник з іншої папки реагування (AwesomeApp), в той час як я створив інший проект в іншій папці.

Запуск пакувальника з каталогу нового додатка вирішив це.


1

Це також може бути пов'язано з тим, що назва компонента Root починається з малих літер.

Переконайте його або, скоріше, створіть проект ще раз із назвою PascalCase.

наприклад, запаліть новий HelloWord


1

Всі наведені відповіді не спрацювали для мене.

У мене був ще один процес вузла, який працює в іншому терміналі, я закрив цей командний термінал і все працювало так, як очікувалося.


1

вам потрібно зареєструвати його в index.android.js / index.ios.js

подобається це:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

AppRegistry.registerComponent('test', () => app);

1

Я вирішив це, змінивши наступне у файлі app.json. Здається, велика літера кинула цю помилку.

Від:

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

До:

{
  "name": "nameofmyapp",
  ...
}

0

Замість того, щоб змінювати ім'я в AppRegistry ,

Запустіть init Bananas, котрий реагує на натиск, це створить код реактивної коробки для проекту Bananas і AppRegistry.registerComponentавтоматично вкаже на банани

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

0

Не з цих рішень працювали на мене. Мені довелося вбити наступний процес і запустив реактивний запуск-android, і він спрацював.

вузол ./local-cli/cli.js запуску


1
які наступні процеси?
bigmadwolf

@bigmadwolf node ./local-cli/cli.js початок
G. Thabit

0

У мене була така ж проблема. Я використовував Windows для створення нативного додатка для андроїда і мав таку ж помилку. Ось, що спрацювало.

  • Перейдіть до папки ANDROID у вашому корені.
  • Створіть файл з ім'ям: local.properties
  • Відкрийте його в редакторі та напишіть:

sdk.dir = C: \ Користувачі \ USERNAME \ AppData \ Місцеві \ Android \ sdk

  • Замініть USERNAME на ім’я машини.

Збережіть та запустіть програму зазвичай. Це працювало для мене.


0

Проблема також з’явиться, коли в index.js ви назвали додаток інакше від імені, яке ви дали для пакету android / ios ; ймовірно, це сталося, коли ви вийняли додаток. Тож будьте впевнені, що під час дзвінка AppRegistry.registerComponent('someappname', () => App)деякіappname також використовуються для нативних пакетів або viceversa.


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

Прочитавши все вищесказане, я виявив, що може бути інша причина цього.

У моєму випадку:

react-native-cli: 2.0.1

реакція-рідний: 0.60.4

та наступна структура:

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

Спершу слід зазначити, що index.android не оновлювався в Android Studio, коли збірка запускається програмою Metro builder (реактивний запуск-android), тому це потрібно робити вручну. Також в студії Android не "читають" свої

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.