React-Native:应用程序尚未注册错误


166

我目前正在阅读React-Native教程。我从入门教程开始,在该教程中,我创建了一个新的react native项目,并成功地在设备上运行了该项目。

然后,我开始了Props教程,复制了代码片段并尝试再次运行该项目,并在屏幕上显示了以下错误消息:


可以分享您的代码吗?
Jagadish Upadhyay

Answers:


435

我想这是由于项目名称与您注册的组件不匹配而导致的错误。

您已经使用一个名称启动了项目,即

react-native init AwesomeApp

但是在index.ios.js文件中,您注册了其他组件

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

当它必须

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

尝试修复它。


7
“香蕉”一些如何为Android工作。但它不在IOS上。
Sumit Kushwaha

92
对于即使组件名称匹配也遇到相同问题的人->确保在另一个终端中没有运行任何其他react-native / node进程。
Nilesh

1
根据我的经验,系统重新启动后会把事情分类……听起来很奇怪。
Kayote

该教程当前称为“ 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

找到进程ID(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>以其他方式跑步吗?,谢谢
Sebastian Palma

据我所知,@SebastiánPalma start命令运行打包程序服务器,因此,如果您已经编译了应用程序,则无需执行run-<platform>
Afshin Mehrabani

31

MainActivity像这样修改

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

2
究竟!那正是我的问题所在,尽管我没有修改它,而是修改了AppRegistry.registerComponent
Sijav

Ios呢?
Dinesh R Rajput,

+1。让我想知道为什么CLI会问我是否要给android / ios版本起一个不同的名称,这只会导致我的项目无法正常工作,而我不得不将其改回。
触摸

我修改了app.js

28

我的解决方案是在“ AppDelegate.m”中更改模块名称

moduleName:@"AwesomeProject"

moduleName:@"YourNewProjectName"


这解决了我的问题。谢谢!
Cory McAboy

为我从React Native运行iOS模拟器工作!
艾米里奥

是的,这可以帮助我。另外一个提示:如果您使用的XCode,请确保你已经设置了正确的名称到您的应用程序名(项目- >目标- >显示名称)
suther

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小时内一直在处理此错误。这解决了我的问题。谢谢!
Balaji Kartheeswaran

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

我遇到了同样的问题,对我来说,根本原因是我从另一个react-native文件夹(AwesomeApp)运行(反应本机启动)打包程序,而我在另一个文件夹中创建了另一个项目。

从新应用程序的目录运行打包程序即可解决该问题。


1

这也可能是由于根组件名称以小写字母开头。

重新更正它,或者使用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

运行react-native init Bananas,这将为Bananas项目创建react样板代码,AppRegistry.registerComponent并将自动指向香蕉

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

0

没有一个解决方案对我有用。我不得不取消以下过程,然后重新运行react-native run-android,它起作用了。

节点./local-cli/cli.js开始


1
以下哪些程序?
bigmadwolf

@bigmadwolf节点./local-cli/cli.js开始
G. Thabit

0

我有同样的问题。我正在使用Windows创建用于Android的react native应用程序,并且遇到了相同的错误。这是起作用的。

  • 导航到根目录中的ANDROID文件夹。
  • 创建一个名称为:local.properties的文件
  • 在编辑器中打开并输入:

sdk.dir = C:\ Users \用户名\ AppData \ Local \ Android \ sdk

  • 将USERNAME替换为您的计算机名称。

正常保存并运行该应用程序。那对我有用。


0

当您在index.js中为应用程序命名的名称与为android / ios软件包指定的名称不同时也会出现此问题;退出应用程序时可能发生了这种情况。因此,请确保在调用时 AppRegistry.registerComponent('someappname', () => App),someappname也用于本机软件包,反之亦然。


0

我发现问题出在哪里(Windows 10 OS),但在Linux中也可能有帮助(您可以尝试)。

在中windows power shell,当您想通过执行以下命令来运行应用程序(在PC启动后首次运行)时,

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

和以下结构:

在此处输入图片说明

首先需要注意的是,由Metro builder(react-native run-android)运行构建时,Android Studio中没有更新index.android,因此必须手动完成。另外在Android Studio中不会“读取”

app.json(默认情况下与index.js一起创建,将其重命名为index.android.js):

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

所以这就像

(以我为例)

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

导致android studio不知道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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.