ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

https://i.stack.imgur.com/In8Me.png

你能分享你的代码吗?

J
Jon Winstanley

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

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

react-native init AwesomeApp

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

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

什么时候必须

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

如果您的组件名称匹配,请确保您没有在另一个终端中运行任何其他 react-native/node 进程。


“香蕉”有些适用于 android。但它不在IOS上。
对于面临相同问题的人,即使组件名称匹配 -> 确保您没有在另一个终端中运行任何其他 react-native/node 进程。
根据我的经验,系统重新启动对事情进行了排序......听起来很奇怪。
该教程目前称为“AwesomeProject”
对于想要 Bananas 而不是 AwesomeApp 的人,可以更改其 AppDelegate.m 文件中的 moduleName:@"AwesemeApp"
A
Afshin Mehrabani

大多数情况下,问题在于您有另一个 react-native start(即 React Native Packager)服务器在另一个终端或另一个 TMUX 选项卡上运行(如果您使用的是 TMUX)。

您需要找到该进程并关闭它,因此例如在运行 react-native run-ios 之后,它将建立一个新的为该特定应用程序注册的打包服务器。

只需使用以下方法找到该过程:

ps aux | grep react-native

使用 kill 命令(例如 kill -9 [PID])找到进程 ID (PID) 并终止打包程序进程。您应该在 macOS 中找到 launchPackager.command 应用程序,不确定其他操作系统。

然后尝试再次运行 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>
R
Raphael Pinel

像这样修改 android/app/src/main/java/com/your-package-name/MainActivity.java 中的 MainActivity

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

确切地!这正是我的问题所在,尽管我没有修改这个,而是将 AppRegistry.registerComponent 修改为那个
IOS呢?
+1。让我想知道为什么 CLI 会询问我是否要给 android/ios 版本起一个不同的名称,而这只会导致我的项目无法工作并且我不得不将其更改回来。
我修改了 app.js
请务必检查根文件夹 { "name": "Bananas", "displayName": "The Bananas" } 中的 app.json
u
user8637708

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

来自moduleName:@"AwesomeProject"

moduleName:@"YourNewProjectName"


这解决了我的问题。谢谢!
为我从 React Native 运行 iOS 模拟器工作!
是的,这对我有帮助。附加提示:如果您使用 XCode,请确保您已将正确的名称设置为您的应用程序名称(项目 -> 目标 -> 显示名称)
谢谢,它正在工作
R
Rafael Ferraro

首先,您必须启动您的应用程序:

react-native start

然后,您必须将您的应用程序名称设置为 registerComponent 的第一个参数。

它工作正常。

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

x
xemasiv

在我的情况下,MainActivity.java 中有这一行,当我使用 react-native-rename cli(来自 NPM)时错过了

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

显然,您必须将其重命名为您的应用程序的名称。


m
mperk

请检查项目中的 app.json 文件。如果没有行 appKey 那么你必须添加它

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

在过去的 24 小时内一直在处理此错误。这解决了我的问题。谢谢!
m
mohit arora

在 index.js 中,您有以下代码:-

import {name as appName} from './app.json'; AppRegistry.registerComponent(appName, () => MyApp);

因此,如果在 app.json 中,名称被定义为“AwesomeProject”,那么请确保它与以下内容相同:-

ios/projectName/AppDelegate.m 中的 moduleName :- android/app/src/main/java/MainActivity.java 中的 moduleName:@"AwesomeProject" 组件名称 @Override protected String getMainComponentName() { return "AwesomeProject"; // 这里 }


谢谢,这对我有用,因为我只在 Android 的 MainActivity.java 中更改了应用程序的名称而忘记为 iOS 更改它。
A
Alex Sarnowski

我通过更改 app.json 文件中的以下内容解决了这个问题。看来大写字母正在引发此错误。

从:

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

至:

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

A
Arshid KV

我认为节点服务器是从另一个文件夹运行的。所以杀死它并在当前文件夹中运行。

查找正在运行的节点服务器:-

lsof -i :8081

杀死正在运行的节点服务器:-

kill -9 <PID>

例如:-

kill -9 1653

从当前反应本机文件夹启动节点服务器:-

react-native run-android


l
la5zl0

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

从新应用程序的目录运行打包程序解决了它。


a
agerxs

经过 2 天的调试后,该解决方案对我有用。改变这个:

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

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

D
Dbl

对我来说,问题很简单。

创建项目 a -> 一切正常

创建项目 b -> 遇到此错误

Metro 仍在运行,工作路径设置为其他应用程序。在我的情况下,解决方案就像关闭 Metro 进程并让它重新启动一样简单


V
Venkat

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

更正它,或者使用 PascalCase 名称再次创建项目。

例如点燃新的HelloWord


K
Khemraj Sharma

所有给出的答案都对我不起作用。

我在另一个终端中运行了另一个节点进程,我关闭了该命令终端,一切都按预期工作。


R
Reyraa

你需要在 index.android.js / index.ios.js 中注册

像这样:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

B
Babajide M. Moibi

这为我解决了

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"
},

a
abpatil

而不是更改 AppRegistry 中的名称,

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

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

G
G. Thabit

没有一个解决方案对我有用。我不得不终止以下进程并重新运行 react-native run-android 并且它起作用了。

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


以下哪些流程?
@bigmadwolf 节点 ./local-cli/cli.js 开始
U
Utsav Chawla

我有同样的问题。我正在使用 Windows 为 android 创建一个 react 本机应用程序,并且遇到了同样的错误。这是有效的。

导航到根目录中的文件夹 ANDROID。

创建一个名称为:local.properties 的文件

在编辑器中打开它并写下:

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

将 USERNAME 替换为您的机器名称。

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


G
Gabriel P.

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


S
Shamsul Arefin Sajib

我弄清楚了我的问题出在哪里(Windows 10 OS),但它也可能在 Linux 中有所帮助(你可以试试)。

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

react-native run-android

它在另一个 console panel 中开始一个 node process/JS server,您不会遇到此错误。但是,当您想要运行另一个应用程序时,您必须需要关闭那个已经在运行JS server console panel。然后从 power shell 为另一个应用程序执行相同的命令,该命令将自动为该应用程序启动另一个 new JS 服务器,您不会遇到此错误.

您不需要关闭并重新打开 power shell 来运行另一个应用程序,您需要关闭 node console 来运行另一个应用程序。


C
Carmine Tambascia

在阅读了以上所有内容后,我发现可能还有另一个原因。

就我而言:

反应原生 cli:2.0.1

反应原生:0.60.4

和以下结构:

https://i.stack.imgur.com/pWsrh.png

首先需要注意的是,当 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);

S
Sergiy Ostrovsky

我的问题是 AndroidManifest.xmlMainActivity.java 包名称不同。所以在清单中我有 package=com.companyName.appName 和活动 package com.appName


W
Wasi Sadman

就我而言,如果有人需要,我有不同的解决方案

yarn remove react-native-material-dropdown

安装新包 react-native-material-dropdown-v2

yarn add react-native-material-dropdown-v2

在您的代码中将 react-native-material-dropdown 替换为 react-native-material-dropdown-v2

例如 import { Dropdown } from 'react-native-material-dropdown' 到 import { Dropdown } from 'react-native-material-dropdown-v2'

另一件事==========

打开node_modules然后搜索react-native-material-textfield打开文件进入src文件夹在src下你会看到affix,helper,label文件夹——每个文件夹下都有一个index.js打开index.js的一一提到文件夹(所有3个文件夹)并搜索文本样式:Animated.Text.propTypes.style,并将其替换为样式:Text.propTypes并像这样导入文本形式react-native import { Animated , Text} from '反应原生';


T
Tiavina Mik

如果你在expo,你不应该改变AppDelegate.m和getMainComponentName()中的moduleName,registerRootComponent(App)的默认名称是“main”,所以应该保持“main”


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
a
amir behrouzi

使用更新的名称更改 app.json 中的 name 和 displayname 属性