2017-12-25 7 views
8

Ich baue React Native App mit Expo. Es funktioniert gut auf meinem Android-Gerät über Expo-Anwendung. Aber ich habe den Fehler, nachdem ich Apk über Exp Build gebaut habe: Android-Befehl.Reactive Native ScrollView TypeError: undefined ist kein Objekt (Bewertung 'this._subscribableSubscriptions.forEach')

TypeError: undefined is not an object (evaluating 'this._subscribableSubscriptions.forEach')             
This error is located at: 
    in ScrollView 
    in RCTView 
    in r 
    in Connect(r) 
    in n 
    in t 
    in r 
    in RCTView 
    in RCTView 
    in t 

Problem ist in ScrollView. Es ist weg, wenn ich ScrollView entferne. Hier ist mein Codeausschnitt.

class Main extends Component { 
state = { 
    refreshing: false 
}; 

renderCurrencies() { 
    if (!Object.values(this.props.currencies).length) { 
     return <View />; 
    } 

    return Object.values(this.props.currencies).map(item => { 
     return (
      <CurrencyRow 
       key={item.code} 
       code={item.code} 
       title={item.title} 
      /> 
     ); 
    }); 
} 

onRefresh =() => { 
    Object.values(this.props.currencies).map(item => { 
     this.props.sellBuyFetch(item.code); 
    }); 
}; 

render() { 
    return (
     <View style={styles.container}> 
      <ScrollView 
       refreshControl={ 
        <RefreshControl 
         refreshing={this.state.refreshing} 
         onRefresh={this.onRefresh} 
        /> 
       } 
      > 
       {this.renderCurrencies()} 
      </ScrollView> 
     </View> 
    ); 
} 
} 

const styles = StyleSheet.create({ 
container: { 
    flex: 1, 
    marginTop: 40, 
}, 
}); 

Antwort

6

Dieser Fehler wird durch uglify-es 3.3.X verursacht, der beim Erstellen einer Release-Version verwendet wird.

diesen Block zu Ihrem package.json hinzufügen: Jetzt

"resolutions": { "uglify-es": "3.2.2" }

Ich habe versucht, auf Expo sowohl die Veröffentlichung und eine Standalone-Anwendung zu bauen und es ist wie ein Zauber funktioniert.

+0

Ich sah diese Lösung auf der GitHub, aber irgendwie hat es mir nicht geholfen. Gibt es einen Cache, den ich löschen sollte oder so? –

+0

Überprüfen Sie Ihr Projekt, node_modules \ uglify-es \ package.json, überprüfen Sie die Version. Wenn es immer noch die Version 3.3.X ist, können Sie den Ordner "uglify-es" löschen und "yarn" erneut ausführen. Dann können Sie in XDE auf Hilfe -> XDE-Cache löschen klicken. –

+0

funktioniert für mich, danke. –

0

Ich denke, Ihr Code viel einfacher mit einem FlatList wäre, aber Ihr Problem bei dieser Methode könnten: renderCurrencies()

Versuchen Sie es, dies zu ändern:

renderCurrencies =() = > {

Vielleicht findet nicht die Requisiten. Sehen Sie ein anderes Problem im Protokoll? Wenn das nicht hilft, debuggen Sie das Problem und finden Sie heraus, ob diese Methode darin enthalten ist.

Hinweis: Ich habe noch nicht mit der Expo gearbeitet.

+0

Ich habe versucht, Rückkehr nur von renderCurrencies Methode, aber kein Glück. Das Problem liegt also nicht in dieser Methode. Habe auch FlatList ausprobiert (danke für den Tipp), habe aber den gleichen Fehler. –

4

Hatte das gleiche Problem. Weg, dies zu beheben:

Änderung

this._subscribableSubscriptions.forEach(

zu

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

in dieser Datei:

YOUR_PROJECT/node_modules/react-native/Libraries/Components/Subscribable.js 
+0

@kykapetak hast du es mit Expo versucht? Ich denke APK baut mit Knotenmodulen von ihrer Seite auf, also helfe mir nicht. –

+1

@ KyKaPeTuk Code-Änderung hat das Problem für mich bearbeitet. Ich verwende keine CRNA oder Expo (aus diesen Gründen). Es gibt einen Thread auf der reaktiven nativen Github reponitory: https://github.com/facebook/react-native/issues/17348 – ChillyPenguin

1

Danke, @kykapetuk und @chillypenguin. Sieht aus wie dieser Reactive Native Bug https://github.com/facebook/react-native/issues/17348. Im Fall der Expo können wir die Problemumgehung von @kykapetuk nicht verwenden, da APK auf dem Expo-Server erstellt wird. Die aktuelle Problemumgehung für mich - nutzen Sie keine Expo. Wahrscheinlich ist die mögliche Lösung hier, eine andere reaktive native Bibliothek zu verwenden.

0

Kann ein Fehler in React Native 0.5.1 sein.

Ich habe es behoben, indem Sie die Variable this._subscribableSubscriptions in Zeile 33 auf reagieren native Dateiprojekt/node_modules/react-native/Bibliotheken/Komponenten/Subscribable.js

dies ändern:

this._subscribableSubscriptions.forEach(

Um dies:

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

https://github.com/facebook/react-native/issues/17348

+0

Das Bearbeiten von Dateien in 'node_modules' ist nie eine gute Idee, da dies beim nächsten Update einer Bibliothek überschrieben wird –

Verwandte Themen