私は現在React-Nativeチュートリアルを進めています。私はGetting Startedチュートリアルから始めました。そこでは私は新しいreactネイティブプロジェクトを作り、そして私のデバイス上でそのプロジェクトをうまく実行することに成功しました。
その後、 Propsチュートリアル を開始しました。コードスニペットをコピーしてプロジェクトをもう一度実行しようとすると、次のエラーメッセージが画面に表示されました。
私はそれがプロジェクトの名前とあなたの登録されたコンポーネントとが一致しないことによって引き起こされたエラーであると思います。
プロジェクトに1つの名前を付けてプロジェクトを開始しました。
react-native init AwesomeApp
しかし、index.ios.jsファイルに他のコンポーネントを登録します。
AppRegistry.registerComponent('Bananas', () => Bananas);
それがなければならないとき
AppRegistry.registerComponent('AwesomeApp', () => Bananas);
修正してみてください。
ほとんどの場合、問題は別の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);
私の場合、MainActivity.Javaにこの行があります。これは、react-native-rename
cli(NPMから)を使用したときに見逃していました
protected String getMainComponentName() {
return "AwesomeApp";
}
明らかにあなたのアプリの名前に変更しなければなりません。
私は同じ問題を抱えていました、そして私のための根本的な原因は私が他のフォルダーの中に別のプロジェクトを作成している間私が別の反応のネイティブフォルダー(AwesomeApp)からパッケージャーを走らせたことです。
新しいアプリのディレクトリからパッケージャを実行することで解決しました。
プロジェクト内のapp.jsonファイルを確認してください。行appKeyがない場合は、それを追加する必要があります
{
"expo": {
"sdkVersion": "27.0.0",
"appKey": "mydojo"
},
"name": "mydojo",
"displayName": "mydojo"
}
ノードサーバは別のフォルダから実行されていると思います。それを殺して現在のフォルダで実行してください。
実行中のノードサーバーを探します。 -
lsof -i :8081
実行中のノードサーバーを強制終了します: -
kill -9 <PID>
例えば:-
kill -9 1653
現在反応しているネイティブフォルダからノードサーバーを起動します。 -
react-native run-Android
index.Android.js/index.ios.jsに登録する必要があります
このような:
'use strict';
import {
AppRegistry
} from 'react-native';
import app from "./app";
AppRegistry.registerComponent('test', () => app);
与えられたすべての答えが私にはうまくいきませんでした。
私は別の端末で別のノードプロセスを実行していました、私はそのコマンド端末を閉じて、すべてが期待通りに動作しました。
これは、ルートコンポーネント名が小文字で始まることが原因である可能性もあります。
それを修正するか、PascalCaseの名前でもう一度プロジェクトを作成してください。
例えば新しいHelloWordを点火する
この問題はindex.jsで、Android/ios packageに付けた名前とは異なる名前でアプリに名前を付けた場合、おそらくこれはアプリを削除したときに発生した可能性があります。 AppRegistry.registerComponent('someappname', () => App)
を呼び出すとき、someappnameはネイティブパッケージやその逆にも使われます。
上記のすべてを読んだ後、これには別の理由がある可能性があることがわかりました。
私の場合:
反応ネイティブCLI:2.0.1
反応ネイティブ:0.60.4
そして次の構造:
まず、Metroビルダー(react-native run-Android)でビルドを実行する場合、index.AndroidはAndroid Studioで更新されないため、手動で実行する必要があることに注意する必要があります。また、Androidスタジオでは、
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);
私は同じ問題を抱えていました。私はAndroid用の反応ネイティブアプリを作成するためにWindowsを使用していて、同じエラーを抱えていました。これがうまくいったことです。
sdk.dir = C:\ Users \USERNAME\ AppData\Local\Android\sdk
アプリを保存して通常どおり実行します。それは私のために働いた。
AppRegistry
の名前を変更するのではなく、
React-native init Bananasを実行します。これはBananasプロジェクト用のreactボイラープレートコードを作成し、AppRegistry.registerComponent
は自動的にbananasを指すようになります。
AppRegistry.registerComponent('Bananas', () => Bananas);
私の場合はどこに問題があるのかを突き止めました(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
を閉じて再度開く必要はありません。別のアプリを実行するためにclosenode console
する必要があります。
解決策のどれも私のために働いた。私は次のプロセスを強制終了し、react-native run-Androidを実行しなければなりませんでした。
node ./local-cli/cli.js start