web-dev-qa-db-fra.com

React-Native: le module AppRegistry n'est pas un module appelable enregistré

J'essaie actuellement d'obtenir le ES6 react-native-webpack-server running Sur un émulateur Android. La différence, c’est que j’ai mis à niveau mon package.json et mon build.grade pour qu’ils utilisent réagissent 0.18.0, et je reçois cette erreur au démarrage. Autant que je sache, AppRegistry est importé correctement. Même si je devais commenter le code, cette erreur persiste. Cela fonctionne sur iOS sans problème. 

Qu'est-ce que je fais mal?

EDIT: Après avoir essayé d’autres machines qui supportent la version 0.18.0, je rencontre toujours le même problème.

 enter image description here

85
Dustin

je viens de faire une mise à niveau pour réagir à 0.18.1-natif d’aujourd’hui, mais il est difficile d’avoir des problèmes de dépendance entre homologues avec la version préliminaire 0.19.0-rc.

Retour à votre question, ce que j'ai fait était

  1. cd Android
  2. Sudo ./gradlew clean

puis retournez dans le répertoire de travail et exécutez react-native run-Android

vous devriez aussi redémarrer votre npm après cette mise à jour.

j'espère que cela fonctionne pour toi.

31
chinloong

J'ai eu le même problème sur iOS et la cause pour moi ce que mon index.io.js était incorrect (parce que j'ai copié un des exemples collé sans regarder son contenu), il se terminait par une déclaration d'exportation de module

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

Au lieu de l'attendu 

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

Vous pourriez avoir le même problème sur Android avec l'index.Android.js, je suppose.

13
jolivier

J'ai résolu ce problème simplement en ajoutant 

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

à mon index.js

assurez-vous que cela existe dans votre index.js

5
Omar Samman

La principale raison de ce problème pourrait être où vous auriez installé un plugin et oublié de le lier.

essaye ça:

react-native link

Relancez votre application.

J'espère que cela aidera. S'il vous plaît laissez-moi savoir dans les commentaires. Merci.

4
iDevAmit

J'espère que cela peut sauver quelqu'un d'un mal de tête. J'ai eu cette erreur après la mise à niveau de ma version native de react. De manière confuse, il n’apparaissait que du côté Android.

Ma structure de fichier comprend un index.ios.js et un index.Android.js. Les deux contiennent le code:

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

Ce que je devais faire était, dans Android/app/src/main/Java/com/{projectName}/MainApplication.Java, changer index en index.Android:

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

Puis, dans app/build/build.gradle, remplacez la entryFile de index.js par index.Android.js

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

Je ne sais pas pourquoi, mais lorsque je déplace AppRegistry.registerComponent du fichier index.js inclus dans index.Android.js pour qu'il réside directement dans index.Android.js, cela semble fonctionner.

2
sofou

Si vous utilisez certains exemples, ils risquent de ne pas fonctionner

Voici ma version pour la vue par défilement

/**
 * 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

Pour moi, mon problème était de mettre le mauvais entry-file lors du regroupement.

J'utilisais App.js comme fichier d'entrée; par conséquent, l'application ne pouvait pas trouver AppRegistry

Correct:

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/

Incorrect:

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/
1
tywhang

Je l'ai désinstallé sur Genymotion. Ensuite, exécutez react-native run-Android pour créer l'application. Et ça a fonctionné. Essayez ceci avant d’exécuter Sudo ./gradlew clean, cela vous fera gagner beaucoup de temps.

1
kklw

redémarrage du conditionneur a fonctionné pour moi. il suffit de tuer réagir le conditionneur natif et de le réexécuter.

0
Ahmad Dehnavi

Dans mon cas, mon index.js pointe simplement vers un autre js au lieu de mon lanceur js par erreur, qui ne contient pas AppRegistry.registerComponent().

Donc, assurez-vous que le fichier votreindex.jspoint pour enregistrer la classe.

0
yao

Mon problème a été résolu en augmentant mes inotify max_user_watches:

Sudo sysctl fs.inotify.max_user_watches=1280000
0
spectralsun

Pour moi, je viens de réagir avec réagit natif comme suit: lien réactif-natif

0
Asma_Kh

Pour moi, c'était un problème de dépendance native de la prochaine version du paquet react, alors que dans mon package.json, l'ancienne était spécifiée. La mise à niveau de ma version de réaction a résolu ce problème.

0
requirunt