react-native - 将数据从本地 JSON 加载到 ListView 会引发 undefined is not object(评估 allrowIDs.length)
问题描述
我很新react-native
,刚刚开始学习它。我正在尝试从位于同一级别的本地 JSON 文件加载数据App.js
。这是我的 JSON 文件的内容:
[{"id":"1", "flower_name":"gumamela", "flower_image_url": "http://1.bp.blogspot.com/-1aSxJn9tssM/VTYXClgOUtI/AAAAAAAAAZ4/q-4vy4XHhCE/s1600/gumamela.jpg"}]
我正在尝试在第二个屏幕上的 ListView(已弃用)中显示图像。这是我的完整代码:
import React, { Component } from 'react';
import {AppRegistry, StyleSheet, ActivityIndicator, Text, View, Alert,Image, Platform, Button} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from "react-navigation";
import customData from './flowers.json';
import ListView from 'deprecated-react-native-listview';
class MainActivity extends Component {
static navigationOptions =
{
title: 'MainActivity',
};
FunctionToOpenSecondActivity = () =>
{
this.props.navigation.navigate('Second');
}
render()
{
return(
<View style = { styles.MainContainer }>
<Button onPress = { this.FunctionToOpenSecondActivity } title = 'Open List of Images'/>
</View>
);
}
}
class SecondActivity extends Component
{
constructor(props) {
super(props);
this.state = {
dataSource: customData,
isLoading: true
}
}
static navigationOptions =
{
title: 'SecondActivity',
};
GetItem (flower_name) {
Alert.alert(flower_name);
}
ListViewItemSeparator = () => {
return (
<View
style={{
height: .5,
width: "100%",
backgroundColor: "#000",
}}
/>
);
}
render()
{
return (
<View style={styles.MainContainer2}>
<ListView
dataSource={this.state.dataSource}
renderSeparator= {this.ListViewItemSeparator}
renderRow={(rowData) =>
<View style={{flex:1, flexDirection: 'row'}}>
<Image source = {{ uri: rowData.flower_image_url }} style={styles.imageViewContainer} />
<Text onPress={this.GetItem.bind(this, rowData.flower_name)} style={styles.textViewContainer} >{rowData.flower_name}</Text>
</View>
}
/>
</View>
);
}
}
const AppNavigator = createStackNavigator(
{
First: { screen: MainActivity },
Second: { screen: SecondActivity }
});
export default createAppContainer(AppNavigator);
const styles = StyleSheet.create(
{
MainContainer:
{
justifyContent: 'center',
flex:1,
margin: 10
},
TextStyle:
{
fontSize: 23,
textAlign: 'center',
color: '#000',
},
MainContainer2 :{
// Setting up View inside content in Vertically center.
justifyContent: 'center',
flex:1,
margin: 5,
paddingTop: (Platform.OS === 'ios') ? 20 : 0,
},
imageViewContainer: {
width: '50%',
height: 100 ,
margin: 10,
borderRadius : 10
},
textViewContainer: {
textAlignVertical:'center',
width:'50%',
padding:20
}
});
AppRegistry.registerComponent('MainActivity', () => MainActivity);
但是当我尝试运行该应用程序并转到第二个屏幕时,我收到一个错误:
`TypeError: undefined is not an object (evaluating 'allRowIDs.length')
This error is located at:
in ListView (at App.js:97)
in RCTView (at App.js:95)
in SecondActivity (at SceneView.js:9)
in SceneView (at StackView.tsx:269)
in RCTView (at CardContainer.tsx:171)
in RCTView (at CardContainer.tsx:170)
in RCTView (at Card.tsx:488)
in RCTView (at createAnimatedComponent.js:151)
in AnimatedComponent (at Card.tsx:475)
in PanGestureHandler (at Card.tsx:468)
in RCTView (at createAnimatedComponent.js:151)
in AnimatedComponent (at Card.tsx:464)
in RCTView (at Card.tsx:457)
in Card (at CardContainer.tsx:138)
in CardContainer (at CardStack.tsx:544)
in RCTView (at createAnimatedComponent.js:151)
in AnimatedComponent (at CardStack.tsx:121)
in MaybeScreen (at CardStack.tsx:537)
in RCTView (at CardStack.tsx:96)
in MaybeScreenContainer (at CardStack.tsx:444)
in CardStack (at StackView.tsx:377)
in KeyboardManager (at StackView.tsx:375)
in RNCSafeAreaView (at src/index.tsx:26)
in SafeAreaProvider (at SafeAreaProviderCompat.tsx:34)
in SafeAreaProviderCompat (at StackView.tsx:372)
in StackView (at StackView.tsx:41)
in StackView (at createStackNavigator.tsx:33)
in Unknown (at createNavigator.js:80)
in Navigator (at createAppContainer.js:430)
in NavigationContainer
in RCTView (at AppContainer.js:101)
in RCTView (at AppContainer.js:119)
in AppContainer (at renderApplication.js:39)
createReactClass$argument_0.render
index.js:416:52
renderRoot
[native code]:0
runRootCallback
[native code]:0
unstable_runWithPriority
scheduler.development.js:643:23
callFunctionReturnFlushedQueue
[native code]:0
解决方案
推荐阅读
- google-sheets - 根据另一个工作表中的范围创建列表
- mysql - 有什么不同?
- r - 根据单元格值使用 kableExtra 为行着色
- scala - 使用 DataFrame 类型在 Scala 中定义函数
- python - 连接四游戏(Python)中的获胜条件?
- hibernate - 休眠 5 @joinformula 与 @MapKeyTemporal
- java - 使用队列来计算字符串
- android - 约束布局切换视图相对于另一个视图的位置
- apache-spark - 从 Cassandra 丰富的 Spark 结构化流
- assembly - 无法使用 int 80h 在 nasm 中输入内容?