web-dev-qa-db-ja.com

React-Native:モジュールAppRegistryは登録済み呼び出し可能モジュールではありません

私は現在、Androidエミュレータで ES6 react-native-webpack-server を実行しようとしています。違いは、package.jsonbuild.gradeをreact 0.18.0を使うようにアップグレードし、起動時にこのエラーが出ることです。私の知る限りではAppRegistryは正しくインポートされています。私がコードをコメントアウトしようとしても、このエラーは発生します。これは問題なくiOS上で動作します。

何がおかしいのですか?

編集:0.18.0をサポートする他の定型句を試した後、私はまだ同じ問題に遭遇しています。

enter image description here

95
Dustin

0.18.1プレリリース版でピア依存関係の問題を抱えている今日、私は反応性ネイティブの0.19.0-rcにアップグレードしました。

あなたの質問に戻ると、私がしたことは

  1. cd Android
  2. Sudo ./gradlew clean

それから作業ディレクトリに戻ってreact-native run-Androidを実行してください。

アップグレード後もnpmを再起動する必要があります。

これがあなたのために働くことを願っています。

40
chinloong

私はiOSでも同じ問題を抱えていましたが、原因は私のindex.ios.jsが間違っていたことです(その内容を見ずに例の1つをコピー&ペーストしたため)モジュールエクスポート宣言

exports.title = ...
exports.description = ...
module.exports = MyRootComponent;

予想の代わりに

AppRegistry.registerComponent('MyAppName', () => MyRootComponent);

あなたは私が推測するindex.Android.jsとAndroid上で同じ問題を抱えている可能性があります。

14
jolivier

一つの主なこの問題の理由がある可能性がありますあなたはプラグインをインストールし、それをリンクするのを忘れているでしょう.

これを試して:

react-native link

アプリを再実行してください。

これが役立つことを願っています。 commentsで教えてください。ありがとう。

9
iDevAmit

私は追加するだけでこの問題を解決しました

import { AppRegistry } from "react-native";
import App from "./App";
import { name as appName } from "./app.json";  
AppRegistry.registerComponent(appName, () => App);

私へindex.js

これがあなたの中に存在することを確認してください index.js

7
Omar Samman

うまくいけば、これは誰かの頭痛を救うことができます。反応ネイティブ版をアップグレードした後にこのエラーが発生しました。紛らわしいことにそれは物事のAndroid側にのみ現れました。

私のファイル構造はindex.ios.jsindex.Android.jsを含みます。どちらにもコードが含まれています。

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

Android/app/src/main/Java/com/{projectName}/MainApplication.Javaで、indexindex.Androidに変更しました。

@Override
protected String getJSMainModuleName() {
    return "index.Android"; // was "index"
}

それからapp/build/build.gradleで、entryFileindex.jsからindex.Android.jsに変更

project.ext.react = [
    entryFile: "index.Android.js" // was index.js"
]
3
dcordz

私にとって私の問題はバンドリングするときに間違ったentry-fileを入れることでした。

私はエントリファイルとしてApp.jsを使用していたので、AppはAppRegistryを見つけることができませんでした

正しい:

react-native bundle --platform Android --dev false --entry-file index.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/

正しくない:

react-native bundle --platform Android --dev false --entry-file App.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/
2
tywhang

理由はわかりませんが、index.Android.jsに含まれているindex.jsファイルからAppRegistry.registerComponentをindex.Android.js内に直接配置するように移動しても、うまくいくようです。

2
sofou

いくつかの例を使用している場合、それらは機能しない可能性があります。

これが私のバージョンのスクロールビューです。

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 */

import React, {
  AppRegistry,
  Component,
  StyleSheet,
  Text,
  View,
  ScrollView,
  TouchableOpacity,
  Image
} from 'react-native';

class AwesomeProject extends Component {
  render() {
    return (
        <View>
          <ScrollView
            ref={(scrollView) => { _scrollView = scrollView; }}
            automaticallyAdjustContentInsets={false}
            onScroll={() => { console.log('onScroll!'); }}
            scrollEventThrottle={200}
            style={styles.scrollView}>
            {THUMBS.map(createThumbRow)}
          </ScrollView>
          <TouchableOpacity
            style={styles.button}
            onPress={() => { _scrollView.scrollTo({y: 0}); }}>
            <Text>Scroll to top</Text>
          </TouchableOpacity>
        </View>
    );
  }
}

var Thumb = React.createClass({
  shouldComponentUpdate: function(nextProps, nextState) {
    return false;
  },
  render: function() {
    return (
      <View style={styles.button}>
        <Image style={styles.img} source={{uri:this.props.uri}} />
      </View>
    );
  }
});

var THUMBS = [
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1
];

THUMBS = THUMBS.concat(THUMBS); // double length of THUMBS
var createThumbRow = (uri, i) => <Thumb key={i} uri={uri} />;

var styles = StyleSheet.create({
  scrollView: {
    backgroundColor: '#6A85B1',
    height: 600,
  },
  horizontalScrollView: {
    height: 120,
  },
  containerPage: {
    height: 50,
    width: 50,
    backgroundColor: '#527FE4',
    padding: 5,
  },
  text: {
    fontSize: 20,
    color: '#888888',
    left: 80,
    top: 20,
    height: 40,
  },
  button: {
    margin: 7,
    padding: 5,
    alignItems: 'center',
    backgroundColor: '#eaeaea',
    borderRadius: 3,
  },
  buttonContents: {
    flexDirection: 'row',
    width: 64,
    height: 64,
  },
  img: {
    width: 321,
    height: 200,
  }
});

AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
1
user6223605

Genymotionでアンインストールしました。それからreact-native run-Androidを実行してアプリをビルドします。そしてそれはうまくいった。 Sudo ./gradlew cleanを実行する前にこれを最初に試してください、それはあなたに多くの時間を節約するでしょう。

1
kklw

パッケージャを再起動私のために働いた。ネイティブのパッケージャをkillして再度実行してください。

0
Ahmad Dehnavi

私の場合、私のindex.jsは、誤って私のLauncher jsの代わりに別のjsを指していますが、これはAppRegistry.registerComponent()を含んでいません。

そのため、ファイルyourindex.jspointがクラスを登録することを確認してください。

0
yao

私の問題は私のinotify max_user_watchesを増やすことで修正されました:

Sudo sysctl fs.inotify.max_user_watches=1280000
0
spectralsun

私のために私はちょうどこのように反応ネイティブとリンク:反応ネイティブリンク

0
Asma_Kh

私にとっては、次のバージョンのreactパッケージへのreact-nativeの依存関係の問題でしたが、私のpackage.jsonでは古いものが指定されていました。私の反応バージョンをアップグレードすることはこの問題を解決しました。

0
requirunt