映射对象并执行api调用
Map objects and do an api call
我有一个像这样的对象
messageData = { items: [{name:'1st msg' draft:{contact: endpoint}},
{name:'1st msg' draft:{contact: endpoint}},
{name:'1st msg' draft:{contact: endpoint}]}
我需要在项目上进行映射,并进行api调用,扩展来自api端点的数据,并将它们返回到表行
renderMessageTableRow() {
let dataRef = this.state.messageData.items,
return(_.map(dataRef, (message) => {
// Get vars from message data including contact method endpoint
let id = message['@id'],
status = message.status,
draftData = message.draft.recipientAddress
return (
<tr>
<td>{id}</td>
<td>{status}</td>
</tr>
)
})
)
}
到目前为止,我的函数看起来像这样,但draftData是一个端点,我需要扩展和填充我的表行,我使用React和Redux。我一直在寻找一个像async和co的库,但不确定我将如何在我的地图功能中插入这个。我只需要调用端点,从该数据生成一些变量,并用它填充表的其余部分。如有任何帮助,不胜感激
有许多方法可以获取数据并将其存储以供呈现(例如redux)。下面是一个简单的示例,它只使用组件的状态,并对componentDidMount进行ajax调用。大多数情况下,您可能会在组件之外执行此类操作,但这应该会让您对流程有一些了解。它使用同构获取,你可以在NPM上获取。
import React from 'react';
require('es6-promise').polyfill();
require('isomorphic-fetch');
const messageData = {
items: [
{ name: '1st msg', draft: { contact: 'http://something.something/api' } },
{ name: '1st msg', draft: { contact: 'http://something.something/api' } },
{ name: '1st msg', draft: { contact: 'http://something.something/api' } },
],
};
class MyComponent extends React.Component {
constructor() {
super();
this.state = { rows: undefined };
}
componentDidMount() {
// make an array of promises that are your api calls
const promises = messageData.items.map((item, i) => fetch(item.draft.contact).then(data => {
messageData.items[i].draft.data = data;
return data;
}));
// resolve all the api calls in parallel and populate the messageData object as they resolve
Promise.all(promises).then(responses => {
// messageData.items are populated now, but if you want to do anything additional, the data from the ajax calls is all here
console.log(responses);
// set the populated items in state
this.setState({ rows: messageData.items });
});
}
render() {
// conditionally populate the rows constant
const rows = (this.state.rows) ? this.state.rows.map(row => (
<tr>
<td>{row.draft.data.somePropFromApi}</td>
</tr>
)) : null;
return (
<table>
{rows}
</table>
);
}
}
export default MyComponent;
相关文章:
- 如何在 API 调用后和 if 语句中启用提交按钮
- NodeJS API调用中Array中的Push和Pull元素
- 在Chrome扩展内部输出Google API调用
- IE11中的第二个调用取消了第一个Fetch API调用
- RxjsObservable:通过一个API调用订阅不同的值
- 通过API调用过滤数据
- 给出<选项>标记一个类?API调用不工作
- 使用Angular获取数据API调用时出错
- javascript API调用导致旧数据
- 在一个服务中引用多个API调用(Angular)
- 背景:'userId'在SignUp API调用后为null
- 对/Token的ASP Web API调用间歇性
- Web API 调用在设备模式下失败
- 将使用 $.ajax() 和 JSONP 的 API 调用替换为服务器到服务器的 API 调用
- 如何将 JavaScript Yahoo Weather API 调用属性替换为变量
- 谷歌日历 api 调用可以在角度工厂内返回承诺吗?
- 仅显示 Google 表格中来自 api 调用的最新数据行
- 我的 API 调用没有返回任何内容
- 如何通过声云 api 调用获取用户 ID
- 在 api 调用$resource显示错误和成功消息