2017-12-25 16 views
8

나는 Expo를 사용하여 React Native 앱을 구축하고 있습니다. 그것은 엑스포 응용 프로그램을 통해 내 안드로이드 장치에서 잘 작동합니다. 하지만 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 =() = > {

아마도 소품을 찾을 수 없습니다. 로그에 다른 문제가 있습니까? 그게 도움이되지 않으면, 문제를 디버그하고 그 안에이 메소드가 있는지 찾아보십시오.

참고 : 아직 엑스포에서 작업 한 적이 없습니다.

+0

내가 해봤 renderCurrencies 방법에서 반환 단지 하지만 행운. 그래서 문제는이 방법 안에 있지 않습니다. 또한 FlatList (팁 주셔서 감사합니다)를 시도했지만, 같은 오류가 있습니다. –

4

같은 문제가있었습니다. 이 문제를 해결하려면 방법 :

변화

this._subscribableSubscriptions.forEach(

해당 파일

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

에 :

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

@kykapetak 엑스포에서 사용해 보셨습니까? 내 생각에 APK를 노드 모듈과 함께 만들면 도움이되지 않습니다. –

+1

@ KyKaPeTuk의 코드 변경이 문제를 해결해주었습니다. 나는 CRNA 나 엑스포를 사용하지 않고있다. 반응이있는 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에서 33 행의 this._subscribableSubscriptions 변수를 평가하여 문제를 해결했습니다.JS

이 변경이로

this._subscribableSubscriptions.forEach(

:

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

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

+0

'node_modules'에서 파일을 편집하는 것은 결코 좋은 생각이 아닙니다. 이것은 라이브러리의 다음 업데이트에 의해 오버라이드 될 것입니다. –