undefined не является объектом (оценка ' allRowsIDs.длина') (реагировать родной)
Я очень новичок в React-Native. Следуя основному учебнику React-Native, я пытаюсь получить данные JSON из "https://facebook.github.io/react-native/movies.json". Я могу отобразить title
и description
свойства, но когда я пытаюсь отобразить свойство "фильмы" с помощью ListView
Я получаю следующую ошибку:
undefined не является объектом (оценка ' allRowsIDs.length')
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
ListView
} from 'react-native';
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
export default class AwesomeProject extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: 'init',
};
}
componentWillMount() {
fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
this.setState({ dataSource: ds.cloneWithRows(responseJson.movies) });
})
.catch((error) => {
console.error(error);
});
}
render() {
return (
<View style={styles.container}>
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
</View>
);
}
}
2 ответов
ваша первоначальная проблема заключается в том, что вы установили this.state.dataSource
в строку 'init'
. Вы хотите, чтобы это указывало на источник данных, который вы объявили ранее.
вы можете решить вашу первую проблему, если вы измените:
this.state = {
dataSource: 'init',
};
для этого:
this.state = {
dataSource: ds
};
тем не менее, это просто приведет вас к новому сообщению об ошибке. Что-то вроде Objects are not valid as a React child...
. Вы можете исправить это, изменив функцию рендеринга, чтобы вернуть простую строку, а не весь объект. Я предлагаю вам начать с названия и двигаться дальше. Попробуйте это, и вы должны быть на своем пути:
render() {
return (
<View style={styles.container}>
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData.title}</Text>}
/>
</View>
);
}
эта проблема может быть вызвана пытался оказать ListView
список ложь.
Я только что открыл приложение, которое я не использовал в течение 6 месяцев, и он взорвался фантастически, потому что база данных была стерта, и это ListView
пытался отобразить и получить пустой список из Redux mapStateToProps
.
длинная история отладки короткая, я поставил пустую проверку списка в методе рендеринга:
render() {
if (!this.props.employees.length) {
return (
<View>
<Text>NO EMPLOYEES TO LIST</Text>
</View>
)
}
return (
<ListView
enableEmptySections
dataSource={this.dataSource}
renderRow={this.renderRow}
/>
)
}
если вы как-то продолжаете получать его после этого, поместите фальшивую регистрацию renderRow
.