React-Native: Ứng dụng chưa được đăng ký lỗi


166

Tôi hiện đang trải qua các hướng dẫn React-Native. Tôi đã bắt đầu với hướng dẫn Bắt đầu, nơi tôi đã thực hiện một dự án gốc phản ứng mới và quản lý thành công để chạy dự án trên thiết bị của mình.

Sau đó tôi bắt đầu hướng dẫn Đạo cụ , tôi đã sao chép đoạn mã và thử chạy lại dự án và có thông báo lỗi sau hiển thị trên màn hình của tôi:


Bạn có thể chia sẻ mã của bạn?
Jagadish Upadhyay

Câu trả lời:


435

Tôi đoán đó là một lỗi gây ra bởi không khớp tên dự án và thành phần đã đăng ký của bạn.

Bạn đã thực hiện dự án với một tên, tức là

react-native init AwesomeApp

Nhưng trong tệp index.ios.js của bạn, bạn đăng ký thành phần khác

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

Khi nó phải được

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

Cố gắng sửa nó.


7
"Chuối" một số cách làm việc cho Android. Nhưng nó không có trên iOS.
Sumit Kushwaha

92
Đối với ai đó phải đối mặt với cùng một vấn đề ngay cả khi tên thành phần khớp -> Hãy chắc chắn rằng bạn không có bất kỳ quá trình phản ứng gốc / nút nào đang chạy trong một thiết bị đầu cuối khác.
Nilesh

1
từ kinh nghiệm của tôi, một hệ thống khởi động lại đã sắp xếp những thứ ... kỳ lạ như nó nghe.
Kayote

Hướng dẫn hiện được gọi là "AwesomeProject"
AdamG

2
và đối với những người muốn Chuối thay vì AwesomeApp có thể thay đổi moduleName:@"AwesemeApp"dòng trong tệp AppDelegate.m của họ
Aequitas

42

Hầu hết các vấn đề là bạn có một react-native start máy chủ (tức là React Native Packager) đang chạy trên một thiết bị đầu cuối khác hoặc một tab khác của TMUX (nếu bạn đang sử dụng TMUX).

Bạn cần tìm quá trình đó và đóng nó lại, vì vậy sau khi chạy react-native run-ios, nó sẽ thiết lập một máy chủ đóng gói mới đã đăng ký cho ứng dụng cụ thể đó.

Chỉ cần tìm quá trình đó bằng cách sử dụng:

ps aux | grep react-native

tìm id quá trình (PID) và giết tiến trình đóng gói bằng killlệnh (vd kill -9 [PID]). Bạn nên tìm launchPackager.commandứng dụng trong macOS, không chắc chắn về các hệ điều hành khác.

Sau đó thử chạy lại run-ios(hoặc android). Bạn sẽ có thể thấy đường dẫn mới sau khi chạy máy chủ đóng gói mới, ví dụ:

Looking for JS files in
   /Users/afshin/Desktop/awesome-app 

Nó hoạt động, ngay cả khi tôi chạy react-native start --port <otherport>, tôi có nên chạy react-native run-<platform>theo cách khác không?, Cảm ơn
Sebastian Palma

@ SebastiánPalma theo như tôi biết, startlệnh chạy máy chủ packager vì vậy nếu bạn đã biên dịch ứng dụng của mình, thì không cần phải làm điều đó run-<platform>.
Afshin Mehrabani

31

Sửa đổi MainActivitynhư thế này,

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

2
CHÍNH XÁC! đó chính xác là vấn đề của tôi, mặc dù thay vì sửa đổi điều này, tôi đã sửa đổi AppRegistry.registerComponent thành điều đó
Sijav

Ios thì sao?
Dinesh R Rajput

+1. Làm cho tôi tự hỏi tại sao CLI hỏi tôi có muốn đặt cho phiên bản android / ios một tên khác không khi nó chỉ dẫn đến dự án của tôi không hoạt động và tôi phải thay đổi lại.
Chạm vào

Tôi đã sửa đổi app.js
cuộn

28

Giải pháp của tôi là thay đổi tên mô-đun trong "AppDelegate.m"

từ moduleName:@"AwesomeProject"

đến moduleName:@"YourNewProjectName"


Điều này đã khắc phục vấn đề của tôi. Cảm ơn!
Cory McAboy

Làm việc cho tôi chạy trình giả lập iOS từ React Native!
Emilio

Đúng, điều đó giúp tôi ra. Một gợi ý bổ sung: Nếu bạn sử dụng XCode, hãy đảm bảo, bạn đã đặt đúng Tên cho Tên ứng dụng của mình (Dự án -> Mục tiêu -> DisplayName)
suther

17

Trước hết, bạn phải bắt đầu ứng dụng của bạn:

react-native start

Sau đó, bạn phải đặt tên ứng dụng của mình làm đối số đầu tiên của registerComponent.

Nó hoạt động tốt.

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

8

Vui lòng kiểm tra tệp app.json của bạn trong dự án. nếu không có dòng appKey thì bạn phải thêm nó

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

3
Đã can thiệp với lỗi này trong 24 giờ qua. Điều này đã khắc phục vấn đề của tôi. Cảm ơn!
Balaji Kartheeswaran

7

Trong trường hợp của tôi, dòng này trong MainActivity.java đã bị bỏ qua khi tôi sử dụng react-native-renamecli (từ NPM)

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

Rõ ràng là bạn phải đổi tên nó thành tên ứng dụng của bạn.


4

Tôi nghĩ rằng máy chủ nút đang chạy từ một thư mục khác. Vì vậy, giết nó và chạy trong thư mục hiện tại.

Tìm máy chủ nút đang chạy: -

lsof -i :8081

Giết máy chủ nút đang chạy: -

kill -9 <PID>

Ví dụ:-

kill -9 1653

Bắt đầu máy chủ nút từ thư mục gốc phản ứng hiện tại: -

react-native run-android


3

Tôi có cùng một vấn đề và đối với tôi nguyên nhân sâu xa là tôi đã chạy (start -igen start) trình đóng gói từ một thư mục gốc phản ứng khác (AwesomeApp), trong khi tôi tạo một dự án khác trong một thư mục khác.

Chạy trình đóng gói từ thư mục của ứng dụng mới đã giải quyết nó.


1

Điều này cũng có thể là do tên thành phần Root bắt đầu bằng chữ thường.

Sửa lại nó hoặc đúng hơn là tạo dự án một lần nữa với tên PascalCase.

ví dụ: kích hoạt HelloWord mới


1

Tất cả các câu trả lời đã cho không làm việc cho tôi.

Tôi đã có một quá trình nút khác đang chạy trong một thiết bị đầu cuối khác, tôi đã đóng thiết bị đầu cuối lệnh đó và mọi thứ hoạt động như mong đợi.


1

bạn cần đăng ký nó trong index.android.js / index.ios.js

như thế này:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

1

Tôi đã giải quyết điều này bằng cách thay đổi các mục sau trong tệp app.json. Có vẻ như chữ in hoa đã ném lỗi này.

Từ:

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

Đến:

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

0

Thay vì đổi tên trong AppRegistry ,

Chạy Chuối ban đầu có phản ứng, điều này sẽ tạo mã phản ứng cho dự án Chuối và AppRegistry.registerComponentsẽ tự động trỏ đến chuối

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

0

Không phải là giải pháp làm việc cho tôi. Tôi đã phải giết quá trình sau đây và chạy lại run-android run-android và nó đã hoạt động.

nút ./local-cli/cli.js bắt đầu


1
quá trình nào sau đây?
bigmadwolf

Nút @bigmadwolf ./local-cli/cli.js bắt đầu
G. Thabit

0

Tôi đã từng gặp vấn đề tương tự. Tôi đã sử dụng Windows để tạo một ứng dụng gốc phản ứng cho Android và cũng gặp lỗi tương tự. Đây là những gì đã làm việc.

  • Điều hướng đến thư mục ANDROID trong thư mục gốc của bạn.
  • Tạo một tệp có tên: local.properies
  • Mở nó trong trình soạn thảo và viết:

sdk.dir = C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk

  • Thay thế USERNAME bằng tên của máy của bạn.

Lưu và chạy ứng dụng bình thường. Điều đó làm việc cho tôi.


0

Vấn đề cũng sẽ xuất hiện khi, trong index.js, bạn đã đặt tên ứng dụng khác với tên bạn đã đặt cho gói android / ios ; có lẽ điều này đã xảy ra khi bạn đã gỡ bỏ ứng dụng. Vì vậy, hãy chắc chắn rằng khi gọi AppRegistry.registerComponent('someappname', () => App), som somname cũng được sử dụng cho các gói gốc hoặc viceversa.


0

Tôi đã tìm ra vấn đề ở đâu trong trường hợp của tôi (HĐH Windows 10), nhưng nó cũng có thể giúp ích cho Linux (Bạn có thể thử).

Trong windows power shell, khi bạn muốn chạy một ứng dụng (lần đầu tiên sau khi khởi động máy tính) bằng cách thực hiện lệnh sau,

react-native run-android

Nó bắt đầu từ một cái node process/JS serverkhác console panelvà bạn không gặp phải lỗi này. Tuy nhiên, khi bạn muốn chạy ứng dụng khác , bạn phải cần phải đóngđang chạy JS server console panel . Và sau đó thực hiện cùng một lệnh cho một ứng dụng khác từ power shell, lệnh đó sẽ tự động khởi động một máy chủ JS mới khác cho ứng dụng này và bạn sẽ không gặp phải lỗi này.

Bạn không cần phải đóng và mở lại power shell để chạy một ứng dụng khác, bạn cần phải đóng node console để chạy một ứng dụng khác.


0

Sau khi đọc tất cả những điều trên, tôi thấy rằng có thể có một lý do khác cho việc này.

Trong trường hợp của tôi:

Reac -igen-cli: 2.0.1

phản ứng tự nhiên: 0,60,4

và cấu trúc sau:

nhập mô tả hình ảnh ở đây

Đầu tiên phải lưu ý rằng index.android không được cập nhật trong Android Studio khi quá trình xây dựng được chạy bởi nhà xây dựng Metro (Reac -igen run-android) vì vậy nó phải được thực hiện thủ công. Ngoài ra trong Android studio không "đọc"

app.json (được tạo theo mặc định cùng với index.js, được đổi tên thành index.android.js):

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

và vì vậy nó giống như

(trong trường hợp của tôi)

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

vì thực tế là android studio không biết authApp đề cập đến cái gì. Tôi khắc phục ngay lúc này đề cập đến tên ứng dụng bằng tên chuỗi của nó và không sử dụng thao tác nhập đó từ app.json:

AppRegistry.registerComponent('authApp', () => MyApp);

0

Điều này đã giải quyết nó cho tôi

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

Vì vậy, index.jstập tin của tôi

import { AppRegistry } from 'react-native';
import App from './App';
AppRegistry.registerComponent('main', () => App);

package.jsontập tin của tôi :

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},

0

Giải pháp này hiệu quả với tôi sau 2 ngày gỡ lỗi. Thay đổi điều này :

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

đến

AppRegistry.registerComponent('main', () => App);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.