2017-12-25 19 views
8

私はExpoでReactネイティブアプリを構築しています。 Expoアプリケーションを使用してAndroid搭載端末で正常に動作します。しかし、私はexpビルドを介してAPKを構築した後、エラーがあります:androidコマンド。React Native ScrollView TypeError:未定義はオブジェクトではありません(評価 '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 

問題はScrollViewの内部です。私がScrollViewを削除すると消えてしまいます。ここに私のコードスニペットがあります。 renderCurrencies()

てみたが、これにそれを変更する:

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, 
}, 
}); 

答えて

6

このバグは、リリースバージョンをビルドするときに使用されるuglify-es 3.3.Xによって引き起こされます。

は、あなたのpackage.jsonにこのブロックを追加します。

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

私は両方の博覧会で公開し、スタンドアロンアプリケーションを構築しようと、それは今魅力のように働いています。

+0

私はgithubでこの解決策を見ましたが、何とかそれは私を助けませんでした。クリアする必要のあるキャッシュはありますか? –

+0

プロジェクトnode_modules \ uglify-es \ package.jsonを確認し、そのバージョンを確認してください。まだ3.3.Xのバージョンであれば、uglify-esフォルダを削除して 'yarn'をもう一度実行してXDEでHelp-> Clear XDE Cacheをクリックすると –

+0

がうまくいきます。 –

0

私はしかし、あなたの問題は、この方法ではあります、あなたのコードはFlatListとはるかに簡単になると思います

renderCurrencies =()= > {

おそらく、小道具を見つけることができません。ログに他の問題がありますか?それが助けにならない場合は、問題をデバッグし、その中にそのメソッドがあるかどうかを調べます。

注:私はまだExpoで働いていません。

+0

私はちょうど renderCurrencies方法が、運からの復帰を試みました。だから問題はこのメソッドの中にはありません。また、FlatList(チップのおかげで)を試みたが、同じエラーがあります。 –

4

同じ問題がありました。そのファイル内の

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

変更

this._subscribableSubscriptions.forEach(

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

@kykapetakあなたは博覧会でそれを試しましたか?私はそれが彼らの側からノードモジュールとAPKを構築すると思うので、私を助けてはいけない。 –

+1

@ KyKaPeTukのコード変更が私の問題を解決しました。私はCRNAやExpoを使っていません(このような理由で)。 反応のネイティブGithub Reponsitoryにスレッドがあります:https://github.com/facebook/react-native/issues/17348 – ChillyPenguin

1

おかげで、@kykapetukと@chillypenguinこれを解決する ウェイ。これはReactネイティブバグhttps://github.com/facebook/react-native/issues/17348のように見えます。 Expoの場合、@kykapetukの回避策を使用することはできません.ExpoサーバーでAPKビルドを実行してください。私のための現在の回避策 - 博覧会を使用しないでください。おそらく、別のバージョンのネイティブライブラリを使用する可能性のあるソリューションです。

0

React Native 0.5.1のバグである可能性があります。

私は、反応するネイティブファイルproject/node_modules/react-native/Libraries/Components/Subscribableの変数this._subscribableSubscriptionsを33行目で評価して修正しました。これに

this._subscribableSubscriptions.forEach(

:この変更JS

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

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

+0

'node_modules'でファイルを編集することは、決して良い考えではありません。これは、ライブラリの次の更新によって上書きされるためです –

関連する問題