2017-12-25 65 views
8

Tôi đang xây dựng ứng dụng React Native với Expo. Nó hoạt động tốt trên thiết bị Android của tôi thông qua ứng dụng Expo. Nhưng tôi có lỗi sau khi tôi đã xây dựng apk thông qua exp xây dựng: lệnh android.React Native ScrollView TypeError: undefined không phải là một đối tượng (đánh giá '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 

Sự cố nằm trong ScrollView. Nó biến mất nếu tôi xóa ScrollView. Đây là đoạn mã của tôi.

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

Trả lời

6

Lỗi này được gây ra bởi uglify-es 3.3.X được sử dụng khi tạo phiên bản phát hành.

Thêm khối này để package.json của bạn:

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

tôi đã cố gắng cả hai xuất bản trên Expo và xây dựng một ứng dụng độc lập và nó làm việc như một nét duyên dáng bây giờ.

+0

Tôi thấy giải pháp này trên github, nhưng bằng cách nào đó nó không giúp tôi. Có bộ nhớ cache nào tôi nên xóa hoặc một cái gì đó như thế này? –

+0

kiểm tra dự án của bạn, node_modules \ uglify-es \ package.json, kiểm tra phiên bản của nó. Nếu nó vẫn là phiên bản 3.3.X, bạn có thể xóa thư mục uglify-es và chạy 'sợi' một lần nữa, sau đó trong XDE, bạn có thể nhấp vào Help-> Clear XDE Cache –

+0

làm việc cho tôi, cảm ơn. –

0

Tôi nghĩ rằng mã của bạn sẽ đơn giản hơn nhiều với một FlatList, tuy nhiên vấn đề của bạn có thể trong phương pháp này: renderCurrencies()

Cố gắng thay đổi nó như thế này:

renderCurrencies =() = > {

Có thể không tìm thấy đạo cụ. Bạn có thấy bất kỳ vấn đề nào khác trong nhật ký không? Nếu điều đó không giúp được, hãy gỡ rối vấn đề và tìm xem liệu (this) có phương thức đó bên trong nó hay không.

Lưu ý: Tôi chưa từng làm việc với Expo.

+0

tôi đã cố gắng trở lại chỉ từ phương pháp renderCurrencies, nhưng không có may mắn. Vì vậy, vấn đề không phải là bên trong phương pháp này. Cũng đã thử FlatList (cảm ơn cho tip), nhưng có cùng một lỗi. –

4

Có cùng vấn đề. Way để giải quyết này:

thay đổi

this._subscribableSubscriptions.forEach(

để

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

trong tập tin đó:

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

@kykapetak bạn đã thử nó với Expo chưa? Tôi nghĩ rằng nó xây dựng APK với các mô-đun nút từ phía họ, vì vậy không giúp tôi. –

+1

Việc thay đổi mã của KyKaPeTuk làm việc xung quanh vấn đề đối với tôi. Tôi không sử dụng CRNA hoặc Expo (vì những lý do này). Có một chủ đề về phản ứng Github bản địa phản ứng: https://github.com/facebook/react-native/issues/17348 – ChillyPenguin

1

Cảm ơn, @kykapetuk và @chillypenguin. Có vẻ như lỗi React Native này là https://github.com/facebook/react-native/issues/17348. Trong trường hợp với hội chợ triển lãm, chúng tôi không thể sử dụng giải pháp @kykapetuk, khiến APK được xây dựng trên máy chủ Expo. Cách giải quyết hiện tại cho tôi - không sử dụng Expo. Có lẽ, giải pháp có thể ở đây để sử dụng một thư viện bản địa phản ứng phiên bản khác.

0

Có thể là lỗi trong React Native 0.5.1.

Tôi đã sửa lỗi bằng cách đánh giá biến this._subscribableSubscriptions trên dòng 33 trên dự án tệp gốc phản ứng/node_modules/phản ứng gốc/Thư viện/Thành phần/Đăng ký.js

Thay đổi này:

this._subscribableSubscriptions.forEach(

Để này:

this._subscribableSubscriptions && this._subscribableSubscriptions.forEach(

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

+0

Chỉnh sửa các tập tin trong 'node_modules' không bao giờ là một ý tưởng tốt, vì điều này sẽ được overriden bởi bản cập nhật tiếp theo của một thư viện –

Các vấn đề liên quan