React-Native: errore dell'applicazione non registrato


166

Attualmente sto seguendo i tutorial di React-Native. Ho iniziato con l'esercitazione introduttiva, in cui ho realizzato un nuovo progetto nativo di reazione e sono riuscito con successo a eseguire il progetto sul mio dispositivo.

Ho quindi avviato il tutorial Props , ho copiato lo snippet di codice e ho provato a eseguire nuovamente il progetto e sul mio schermo è apparso il seguente messaggio di errore:


Puoi condividere il tuo codice?
Jagadish Upadhyay,

Risposte:


435

Immagino che sia un errore causato dalla mancata corrispondenza del nome del progetto e del componente registrato.

Hai avviato il progetto con un nome, ad es

react-native init AwesomeApp

Ma nel tuo file index.ios.js registri altri componenti

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

Quando deve essere

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

Prova a risolverlo.


7
"Banane" come funziona per Android. Ma non su IOS.
Sumit Kushwaha,

92
Per qualcuno che sta affrontando lo stesso problema anche se il nome del componente corrisponde -> Accertarsi di non avere altri processi reagenti / nativi in ​​esecuzione in un altro terminale.
Nilesh,

1
dalla mia esperienza, un riavvio del sistema ha ordinato le cose ... per quanto strano possa sembrare.
Kayote,

Il tutorial è attualmente chiamato "
AwesomeProject

2
e per le persone che desiderano Bananas invece di AwesomeApp possono cambiare la moduleName:@"AwesemeApp"linea nel loro file AppDelegate.m
Aequitas,

42

Il più delle volte il problema è che hai un altro react-native startserver (ovvero React Native Packager) in esecuzione su un altro terminale o su un'altra scheda di TMUX (se stai usando TMUX).

È necessario trovare quel processo e chiuderlo, quindi dopo l'esecuzione, react-native run-iosad esempio, stabilirà un nuovo server packager registrato per quella specifica applicazione.

Trova quel processo usando:

ps aux | grep react-native

trova l'id di processo (PID) e termina il processo packager usando il killcomando (ad es kill -9 [PID].). Dovresti trovare l' launchPackager.commandapp in macOS, non sei sicuro degli altri sistemi operativi.

Quindi prova a eseguire run-iosnuovamente (o Android). Dovresti essere in grado di vedere il nuovo percorso dopo aver eseguito il nuovo server packager, ad esempio:

Looking for JS files in
   /Users/afshin/Desktop/awesome-app 

Funziona, anche se corro react-native start --port <otherport>, dovrei correre react-native run-<platform>in un altro modo? Grazie
Sebastian Palma

@ SebastiánPalma, per quanto ne so, il startcomando esegue il server packager, quindi se hai già compilato la tua applicazione, non è necessario run-<platform>.
Afshin Mehrabani,

31

Modifica in MainActivityquesto modo,

@Override
protected String getMainComponentName() {
    return "Bananas"; // here
}

2
ESATTAMENTE! questo era esattamente il mio problema, anche se invece di modificarlo ho modificato AppRegistry.registerComponent a quello
Sijav

che dire di Ios?
Dinesh R Rajput,

+1. Mi chiedo perché la CLI mi chieda se voglio dare alla versione android / ios un nome diverso quando questo porterà al mio progetto a non funzionare e io dovrò cambiarlo.
Tocca

Avevo modificato app.js
roll

28

La mia soluzione è cambiare il nome del modulo in "AppDelegate.m"

a partire dal moduleName:@"AwesomeProject"

per moduleName:@"YourNewProjectName"


Questo risolto il mio problema. Grazie!
Cory McAboy,

Ha funzionato per me con il simulatore iOS di React Native!
Emilio,

Sì, questo mi aiuta. Un ulteriore suggerimento: se usi XCode, assicurati di aver impostato il Nome giusto sul Nome app (Progetto -> Destinazione -> DisplayName)
Suther

17

Innanzitutto è necessario avviare l'applicazione:

react-native start

Quindi, è necessario impostare il nome dell'applicazione come primo argomento di registerComponent.

Funziona bene

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);

8

Controlla il tuo file app.json nel progetto. se non è presente l'app lineKey, è necessario aggiungerla

{
  "expo": {
    "sdkVersion": "27.0.0",
    "appKey": "mydojo"
  },
  "name": "mydojo",
  "displayName": "mydojo"
}

3
Ho intromesso questo errore nelle ultime 24 ore. Questo risolto il mio problema. Grazie!
Balaji Kartheeswaran,

7

Nel mio caso c'è questa riga in MainActivity.java che è stata persa quando ho usato react-native-renamecli (da NPM)

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

Ovviamente devi rinominarlo con il nome della tua app.


4

Penso che il nodo server sia in esecuzione da un'altra cartella. Quindi uccidilo ed eseguilo nella cartella corrente.

Trova il server dei nodi in esecuzione: -

lsof -i :8081

Uccidere il nodo server in esecuzione: -

kill -9 <PID>

Per esempio:-

kill -9 1653

Avviare il nodo server dalla cartella nativa di reagire corrente: -

react-native run-android


3

Ho avuto lo stesso problema e per me la causa principale è stata che ho eseguito (avvio di reazione nativo) il packager da un'altra cartella di reazione (AwesomeApp), mentre ho creato un altro progetto in un'altra cartella.

L'esecuzione del packager dalla directory della nuova app l'ha risolto.


1

Ciò può anche essere dovuto al fatto che il nome del componente principale inizia con lettere minuscole.

Correggilo o piuttosto crea nuovamente il progetto con un nome PascalCase.

ad es. accendere il nuovo HelloWord


1

Tutte le risposte fornite non hanno funzionato per me.

Ho avuto un altro processo di nodo in esecuzione in un altro terminale, ho chiuso quel terminale di comando e tutto ha funzionato come previsto.


1

devi registrarlo in index.android.js / index.ios.js

come questo:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

1

Ho risolto questo problema modificando quanto segue nel file app.json. Sembra che la lettera maiuscola stia generando questo errore.

A partire dal:

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

Per:

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

0

Invece di cambiare il nome in AppRegistry,

Esegui init-native banana Bananas, questo creerà un codice di reazione per il progetto Banane e AppRegistry.registerComponentindicherà automaticamente le banane

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

0

Nessuna delle soluzioni ha funzionato per me. Ho dovuto terminare il seguente processo e ri-eseguito run-native-android-reattivo e ha funzionato.

inizio nodo ./local-cli/cli.js


1
quali processi seguenti?
bigmadwolf,

@bigmadwolf node ./local-cli/cli.js start
G. Thabit

0

Ho avuto lo stesso problema. Stavo usando Windows per creare un'app nativa reattiva per Android e avevo lo stesso errore. Ecco cosa ha funzionato.

  • Passare alla cartella ANDROID nella radice.
  • Crea un file con nome: local.properties
  • Aprilo nell'editor e scrivi:

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

  • Sostituisci USERNAME con il nome della tua macchina.

Salvare ed eseguire l'app normalmente. Questo ha funzionato per me.


0

Il problema apparirà anche quando, in index.js, hai chiamato l'app in modo diverso dal nome che hai dato per il pacchetto android / ios ; probabilmente questo è successo quando hai espulso l'app. Quindi assicurati che quando chiami AppRegistry.registerComponent('someappname', () => App), someappname viene usato anche per i pacchetti nativi o viceversa.


0

Ho capito dov'era il problema nel mio caso (sistema operativo Windows 10), ma potrebbe anche aiutare anche in Linux (potresti provare).

In windows power shell, quando si desidera eseguire un'app (la prima volta dopo l'avvio del PC) eseguendo il comando seguente,

react-native run-android

Inizia a node process/JS serverin un altro console panele non si verifica questo errore. Ma, quando si desidera eseguire un'altra applicazione , è necessario bisogno di chiudere quella già in esecuzione JS server console panel . Quindi esegui lo stesso comando per un'altra app dal power shell, quel comando avvierà automaticamente un altro nuovo server JS per questa app e non riscontrerai questo errore.

Non è necessario chiudere e riaprire power shell per eseguire un'altra app, è necessario chiudere node console per eseguire un'altra app.


0

Dopo aver letto tutto quanto sopra, ho scoperto che potrebbe esserci un'altra ragione per questo.

Nel mio caso:

Rea-native-cli: 2.0.1

reattivo nativo: 0.60.4

e seguente struttura:

inserisci qui la descrizione dell'immagine

Innanzitutto bisogna notare che index.android non è stato aggiornato in Android Studio quando la build è gestita da Metro Builder (reattivo nativo run-android), quindi deve essere eseguita manualmente. Anche in Android Studio non "legge" il

app.json (creato di default insieme a index.js, che ha ribattezzato index.android.js):

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

e così questo piace

(nel mio caso)

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

causa il fatto che Android Studio non sa a cosa si riferisce authApp. Risolvo per il momento facendo riferimento al nome dell'app con il nome della stringa e non usando quell'importazione da app.json:

AppRegistry.registerComponent('authApp', () => MyApp);

0

Questo mi ha risolto

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

Quindi il mio index.jsfile

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

E il mio package.jsonfile:

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},

0

Questa soluzione ha funzionato per me dopo 2 giorni di debug. Cambia questo :

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

per

AppRegistry.registerComponent('main', () => App);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.