Я хочу перечислить данные из API, который я использую. Но я получаю сообщение об ошибке.
// Here I'm getting the data.
componentWillMount() {
tokenner()
.then(responseJson => {
const token = "Bearer " + responseJson.result.token;
this.setState({ token });
fetch(
"myapiurl//notimportant",
{
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: token
}
}
)
.then(response => response.json())
.then(responseData => {
this.setState({
isLoading: false,
dataSource: responseData.result
});
});
})
.catch(error => console.warn(error));
}
Затем я использую следующие коды, чтобы перечислить эти данные:
render() {
if (this.state.isLoading) {
return (
<View style = {styles.container}>
<ActivityIndicator />
</View>
);
} else {
console.warn(this.state.dataSource) // I got the data. Everything ok.
this.state.dataSource.map((val, key) => {
return ( // There was no data returned error.
<View key = {key} style = {styles.item}>
<Text>{val.id}</Text>
<Text>{val.name}</Text>
<Text>{val.surname}</Text>
<Text>{"Sıra" + key}</Text>
</View>
);
});
}
} }
Ошибка: Ошибка
Программа не выдает ошибку, когда я печатаю результат без использования цикла. Что мне делать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не возвращаете результат своей карты, т.е.
return this.state.dataSource.map((val, key) => {
return (
<View key = {key} style = {styles.item}>
<Text>{val.id}</Text>
<Text>{val.name}</Text>
<Text>{val.surname}</Text>
<Text>{"Sıra" + key}</Text>
</View>
);
});
Оператор внутреннего возврата предназначен для функции, которая выполняется для каждого элемента в dataSource, но затем вам нужно return массив, который это построил
Вы пробовали это? Вы забыли вернуться в операторе else
...
return this.state.dataSource.map((val, key)
....
Метод карта() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.
this.state.dataSource.map((val, key) => {
return (
<View key = {key} style = {styles.item}>
<Text>{val.id}</Text>
<Text>{val.name}</Text>
<Text>{val.surname}</Text>
<Text>{"Sıra" + key}</Text>
</View>
);
});
^ на самом деле это массив элементов. вы должны вернуть это внутри рендера
render(){
......
return this.state.dataSource.map((val, key) => {
return (
<View key = {key} style = {styles.item}>
<Text>{val.id}</Text>
<Text>{val.name}</Text>
<Text>{val.surname}</Text>
<Text>{"Sıra" + key}</Text>
</View>
);
});
}
В вашей ветке else нет оператора возврата. Функция рендеринга всегда должна возвращаться. Попробуйте добавить return в ветку else.