ReactJS - запрос REST API внутри функции .map?

Как мне создать повторяющиеся элементы разметки в компоненте React, который также требует запроса REST API для каждого из них? Первоначально у меня были вызовы, завершающиеся в цикле for-each в функции componentDidMount. Но это потребовало вызова setState внутри цикла, чтобы запустить повторный рендеринг. Поведение было нестабильным, и очевидно, что эта техника не очень хорошая идея.

Итак, теперь я пытаюсь запустить запросы внутри функции .map моего рендера (см. Ниже). Но это производит эта ошибка.

Есть ли способ вернуть значение элемента вместо обещания? (Вероятно, скорее вопрос JS, чем вопрос React ...)
Или я вообще ошибаюсь?

return (<div>   
    {this.props.currentProject.Tasks.map((task => {
        return ProjectsService.getTaskBaselines(this.props.currentProject.PWAGuid, task.TaskId, this.props.context).then((baseline: any): any => {
            return (<div>{task.TaskName}</div>);
        })                                
    }))}
</div>);

Можете ли вы изменить окончательное состояние всех запросов, позвонив в ProjectsService.getTaskBaselines? Возможно, получение результатов всего и затем рендеринг?

Scott 06.05.2018 05:17
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
575
1

Ответы 1

Похоже, вы хотите запросить все API, а затем обработать ответ, когда все будет улажено.

Попробуй это:

const promises = this.props.currentProject.Tasks.map((task => {
        return new Promise(function(resolve, reject) {
              resolve(task);
        });

Promise.all(promises).then((data) => {
     this.setState({
          // act on all of your data
      });
});

Затем визуализируйте this.state в вашей функции render().

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