我目前正在阅读React-Native教程。我从入门教程开始,在该教程中,我创建了一个新的react native项目,并成功地在设备上运行了该项目。
然后,我开始了Props教程,复制了代码片段并尝试再次运行该项目,并在屏幕上显示了以下错误消息:
我猜这是由于项目名称与您注册的组件不匹配而导致的错误。
您已经使用一个名称启动了项目,即
react-native init AwesomeApp
但是在index.ios.js文件中,您注册了其他组件
AppRegistry.registerComponent('Bananas', () => Bananas);
当它必须是
AppRegistry.registerComponent('AwesomeApp', () => Bananas);
如果您的组件名称确实匹配,请确保您在另一个终端中没有运行任何其他react-native / node进程。
大多数情况下,问题在于您有另一台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
MainActivity
像这样修改
@Override
protected String getMainComponentName() {
return "Bananas"; // here
}
我的解决方案是在“ AppDelegate.m”中更改模块名称
从
moduleName:@"AwesomeProject"
至
moduleName:@"YourNewProjectName"
首先,您必须启动您的应用程序:
react-native start
然后,您必须将应用程序名称设置为registerComponent的第一个参数。
它工作正常。
AppRegistry.registerComponent('YourProjectName', () => YourComponentName);
请在项目中检查您的app.json文件。如果没有行appKey,则必须添加它
{
"expo": {
"sdkVersion": "27.0.0",
"appKey": "mydojo"
},
"name": "mydojo",
"displayName": "mydojo"
}
在我的情况下,MainActivity.java中有这行,当我使用react-native-rename
cli时(从NPM)错过了
protected String getMainComponentName() {
return "AwesomeApp";
}
显然,您必须将其重命名为您应用的名称。
我认为节点服务器正在从另一个文件夹运行。因此,将其杀死并在当前文件夹中运行。
查找正在运行的节点服务器:
lsof -i :8081
杀死正在运行的节点服务器:
kill -9 <PID>
例如:-
kill -9 1653
从当前的反应本机文件夹启动节点服务器:
react-native run-android
我遇到了同样的问题,对我而言,根本原因是我从另一个react-native文件夹(AwesomeApp)运行(反应本机启动)打包程序,而我在另一个文件夹中创建了另一个项目。
从新应用程序的目录运行打包程序即可解决该问题。
这也可能是由于根组件名称以小写字母开头。
重新更正它,或者使用PascalCase名称再次创建项目。
例如,点燃新的HelloWord
所有给出的答案都不适用于我。
我在另一个终端上运行了另一个节点进程,我关闭了该命令终端,一切正常。
您需要在index.android.js / index.ios.js中注册它
像这样:
'use strict';
import {
AppRegistry
} from 'react-native';
import app from "./app";
AppRegistry.registerComponent('test', () => app);
我通过更改app.json文件中的以下内容解决了此问题。大写字母似乎抛出了此错误。
从:
{
"name": "Nameofmyapp",
...
}
至:
{
"name": "nameofmyapp",
...
}
经过2天的调试,此解决方案为我工作。改变这个:
AppRegistry.registerComponent('AppName', () => App);
至
AppRegistry.registerComponent('main', () => App);
与其更改名称AppRegistry
,
运行react-native init Bananas,这将为Bananas项目创建react样板代码,AppRegistry.registerComponent
并将自动指向香蕉
AppRegistry.registerComponent('Bananas', () => Bananas);
没有一个解决方案对我有用。我不得不取消以下过程,然后重新运行react-native run-android,它起作用了。
节点./local-cli/cli.js开始
我有同样的问题。我正在使用Windows创建用于Android的react native应用程序,并且遇到相同的错误。这是起作用的。
- 导航到根目录中的ANDROID文件夹。
- 创建一个名称为:local.properties的文件
- 在编辑器中打开并输入:
sdk.dir = C:\ Users \用户名\ AppData \ Local \ Android \ sdk
- 将USERNAME替换为您的计算机名称。
正常保存并运行该应用程序。那对我有用。
当您在index.js中为应用程序命名的名称与为android / ios软件包指定的名称不同时,也会出现此问题;退出应用程序时可能发生了这种情况。因此,请确保在调用时 AppRegistry.registerComponent('someappname', () => App)
,someappname也用于本机软件包,反之亦然。
我发现问题出在哪里(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
即可运行另一个应用程序。
阅读以上所有内容后,我发现可能还有另一个原因。
就我而言:
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);
这为我解决了
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"
},
我的问题是inAndroidManifest.xml
和MainActivity.java
程序包名称不同。所以我在清单package=com.companyName.appName
和活动中package com.appName
就我而言,如果有人需要,我有另一种解决方案
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
例如,从'react-native-material-dropdown'导入{Dropdown}以从'react-native-material-dropdown-v2'导入{Dropdown}
另一件事==========
- 打开node_modules,然后搜索
react-native-material-textfield,打开文件并转到src文件夹 - 在src下,您会看到affix,helper,label文件夹-每个文件夹下都有一个index.js
- 依次打开提到的文件夹(所有3个文件夹)的index.js并搜索文本样式:Animated.Text.propTypes.style,然后将其替换为样式:Text.propTypes
- 并像这样从'react-native'导入{Animated,Text}来导入文本形式的react-native;
文章标签:facebook , javascript , react-native , reactjs
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!