Как перечислить с помощью циклов в React Native

Я хочу перечислить данные из 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>
    );
  });
}

} }

Ошибка: Ошибка

Программа не выдает ошибку, когда я печатаю результат без использования цикла. Что мне делать?

В вашей ветке else нет оператора возврата. Функция рендеринга всегда должна возвращаться. Попробуйте добавить return в ветку else.

avichalp 01.09.2018 16:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы не возвращаете результат своей карты, т.е.

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

Другие вопросы по теме