ReactJS - .map函数中的REST API查询?

时间:2018-05-06 03:01:20

标签: javascript reactjs promise

如何在React组件中生成重复的标记元素,还需要对每个元素进行REST API查询?最初,我在componentDidMount函数中的for-each循环中完成了调用。但是这需要在循环内调用setState,以便触发重新渲染。行为不稳定,and apparently that technique is not a good idea.

所以,现在我正在尝试让查询在我的渲染的.map函数内运行(见下文)。但那产生了this error

有没有办法返回元素值而不是promise? (可能更多的是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>);

1 个答案:

答案 0 :(得分:2)

似乎您想要查询所有API,然后在完成所有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()