Ich gehe gerade durch die React-Native-Tutorials. Ich habe mit dem Tutorial "Erste Schritte" angefangen, in dem ich ein neues reaktives Projekt erstellte und das Projekt erfolgreich auf meinem Gerät ausführen konnte.
Ich habe dann das Props-Tutorial gestartet, kopierte das Code-Snippet und versuchte, das Projekt erneut auszuführen. Die folgende Fehlermeldung wurde auf meinem Bildschirm angezeigt:
Ich vermute, es ist ein Fehler, der dadurch verursacht wurde, dass der Name des Projekts und Ihre registrierte Komponente nicht übereinstimmen.
Sie haben ein Projekt mit einem Namen begonnen, d. H.
react-native init AwesomeApp
In Ihrer Datei index.ios.js registrieren Sie jedoch eine andere Komponente
AppRegistry.registerComponent('Bananas', () => Bananas);
Wenn es muss sein
AppRegistry.registerComponent('AwesomeApp', () => Bananas);
Versuch es zu reparieren.
In den meisten Fällen besteht das Problem darin, dass Sie einen anderen react-native start
-Server (d. H. React Native Packager-Server) haben, der entweder auf einem anderen Terminal oder auf einem anderen Tab von TMUX (wenn Sie TMUX verwenden) ausgeführt wird.
Sie müssen diesen Prozess finden und schließen, sodass nach der Ausführung von react-native run-ios
beispielsweise ein neuer Packager-Server eingerichtet wird, der sich für diese bestimmte Anwendung registriert hat.
Finden Sie diesen Prozess einfach mit:
ps aux | grep react-native
finden Sie die Prozess-ID (PID) und beenden Sie den Packager-Prozess mit dem Befehl kill
(z. B. kill -9 [PID]
). Sie sollten die launchPackager.command
-App in macOS finden, nicht sicher über die anderen Betriebssysteme.
Versuchen Sie dann erneut, den run-ios
(oder Android) auszuführen. Sie sollten den neuen Pfad nach dem Ausführen des neuen Packager-Servers sehen können, z. B .:
Looking for JS files in
/Users/afshin/Desktop/awesome-app
MainActivity
so ändern,
@Override
protected String getMainComponentName() {
return "Bananas"; // here
}
Zunächst müssen Sie Ihre Bewerbung starten:
react-native start
Dann müssen Sie Ihren Anwendungsnamen als erstes Argument von registerComponent festlegen.
Es funktioniert gut.
AppRegistry.registerComponent('YourProjectName', () => YourComponentName);
Meine Lösung ist der Name des Änderungsmoduls in "AppDelegate.m".
von moduleName:@"AwesomeProject"
zu moduleName:@"YourNewProjectName"
In meinem Fall gibt es diese Zeile in MainActivity.Java, die vermisst wurde, als ich react-native-rename
cli (von NPM) verwendete
protected String getMainComponentName() {
return "AwesomeApp";
}
Natürlich müssen Sie es in den Namen Ihrer App umbenennen.
Ich hatte das gleiche Problem und für mich war die Hauptursache, dass ich den Packager von einem anderen Reaktiver-Ordner (AwesomeApp) aus ausgeführt habe (reaktiver Start), während ich ein anderes Projekt in einem anderen Ordner erstellt habe.
Wenn Sie den Packager im Verzeichnis der neuen App ausführen, wurde das Problem behoben.
Bitte überprüfen Sie Ihre app.json-Datei im Projekt. Wenn es keine Zeile appKey gibt, müssen Sie es hinzufügen
{
"expo": {
"sdkVersion": "27.0.0",
"appKey": "mydojo"
},
"name": "mydojo",
"displayName": "mydojo"
}
Ich denke der Knotenserver läuft aus einem anderen Ordner. Also töte es und führe den aktuellen Ordner aus.
Laufenden Knotenserver suchen: -
lsof -i :8081
Beende laufenden Knotenserver: -
kill -9 <PID>
Z.B:-
kill -9 1653
Start des Knotenservers aus dem aktuellen ursprünglichen Ordner: -
react-native run-Android
sie müssen es in index.Android.js/index.ios.js registrieren
so was:
'use strict';
import {
AppRegistry
} from 'react-native';
import app from "./app";
AppRegistry.registerComponent('test', () => app);
Alle gegebenen Antworten haben für mich nicht funktioniert.
Ich hatte einen anderen Knotenprozess in einem anderen Terminal, ich schloss das Befehlsterminal und alles funktionierte wie erwartet.
Dies kann auch daran liegen, dass der Name der Stammkomponente mit Kleinbuchstaben beginnt.
Korrigieren Sie es oder erstellen Sie das Projekt erneut mit einem PascalCase-Namen.
z.B. zünden Sie neues HelloWord an
Das Problem wird auch angezeigt wenn Sie die App in index.js anders benannt haben, als Sie sie für das Android/ios-Paket angegeben haben ; Wahrscheinlich ist dies passiert, wenn Sie die App ausgeworfen haben. Stellen Sie daher sicher, dass beim Aufruf von AppRegistry.registerComponent('someappname', () => App)
auch ein anderer Name für die nativen Pakete oder viceversa verwendet wird.
Nachdem ich alles oben Gelesene gelesen habe, habe ich festgestellt, dass es einen anderen Grund dafür geben könnte.
In meinem Fall:
reag-native-cli: 2.0.1
reaktionsnativ: 0.60.4
und folgende Struktur:
Zunächst muss beachtet werden, dass index.Android in Android Studio nicht aktualisiert wurde, wenn der Build von Metro Builder ausgeführt wird (Reactive-Native-Run-Android), sodass er manuell ausgeführt werden muss. Auch in Android Studio "liest" das nicht
app.json (standardmäßig zusammen mit index.js erstellt, die index.Android.js umbenannt haben):
{
"name": "authApp",
"displayName": "authApp"
}
und so das mag
(in meinem Fall)
import {authApp as appName} from './app.json';
weil Android studio nicht weiß, worauf sich authApp bezieht. Ich behebe im Moment, indem ich mich auf den App-Namen mit seinem String-Namen beziehe und diesen Import aus app.json nicht verwende:
AppRegistry.registerComponent('authApp', () => MyApp);
Ich hatte das gleiche Problem ... Ich benutzte Windows zum Erstellen einer reaktiven App für Android und hatte den gleichen Fehler. Hier ist, was funktioniert hat.
sdk.dir = C:\Benutzer\Benutzername\AppData\Local\Android\sdk
Speichern und führen Sie die App normal aus. Das hat bei mir funktioniert.
Anstatt den Namen in AppRegistry
zu ändern,
Führen Sie reaktions-native Init-Bananen aus. Dadurch wird Reactor-Boilerplate-Code für das Bananenprojekt erstellt und AppRegistry.registerComponent
zeigt automatisch auf Bananen
AppRegistry.registerComponent('Bananas', () => Bananas);
Ich habe herausgefunden, wo das Problem in meinem Fall lag (Windows 10 OS), aber es könnte auch in Linux helfen (Sie könnten es versuchen).
Wenn Sie in windows power Shell
eine App (zum ersten Mal nach dem Start des PCs) ausführen möchten, indem Sie den folgenden Befehl ausführen,
react-native run-Android
Es startet einen node process/JS server
in einem anderen console panel
, und dieser Fehler tritt nicht auf. Wenn Sie jedoch eine andere App ausführen möchten, müssen Sie mussclose dieses bereitsJS server console panel
ausführen. Führen Sie dann denselben Befehl für eine andere App aus power Shell
aus. Dieser Befehl startet automatisch einen anderen new JS-Server für diese App, und Sie erhalten diesen Fehler nicht.
Sie müssen nicht close und erneutpower Shell
öffnen, um eine andere App auszuführen, Sie müssen closenode console
ausführen, um eine andere App auszuführen.
Keine der Lösungen funktionierte für mich. Ich musste den folgenden Prozess beenden und rea-native run-Android laufen lassen und es funktionierte.
knoten ./local-cli/cli.js starten