javascript - 将 2 个 API 数据源加入 1 个反应表的最佳方法?
问题描述
我需要来自 2 个不同 API 的数据,它们都支持分页。
如何以高性能的方式在表中显示连接的数据?
我需要加入他们的id
,但是一个 API 返回的数据比另一个少,所以我不能简单地一一匹配。我需要实现一个过滤器。
暴力映射数据源A到B的唯一方法是什么?
解决方案
如果数据来自两个不同的 API,并且您正在发出单独的请求,那么您有很多选择。我个人的偏好是state
在您的控制器中拥有map
每个响应id
,然后您可以通过 id 选择附加数据:
import React, { useState, useEffect } from 'react';
import { keyBy } from 'lodash';
function TableComponent(props) {
// Destructure your props...I'm assuming you pass some id into fetch data
const { id } = props;
// State
const [tableData, setTableData] = useState([]);
// Load data when id changes
useEffect(() => {
fetchData()
}, [id]);
async function fetchData() {
// Get your data from each source
const apiData_A = await fetchDataFromAPI_A(id);
const apiData_B = await fetchDataFromAPI_B(id);
// Key each data set by result ids
const resultsMappedById_A = keyBy(apiData_A, 'id');
const resultsMappedById_B = keyBy(apiData_B, 'id');
// Combine data into a single set
// this assumes your getting same results from each api
const combinedDataSet = Object.keys(resultsMappedById_A)
.reduce((acc, key) => {
// Destructure results together, merging objects
acc.push({
...resultsMappedById_A[key],
...resultsMappedById_B[key]
});
return acc;
}, []);
setTableData(combinedDataSet);
}
async function fetchDataFromAPI_A(id) {
// Fetch your data and return results
}
async function fetchDataFromAPI_A(id) {
// Fetch your data and return results
}
function renderTableRow(data) {
return (
<tr>
<td>{data.id}</td>
<td>{data.apiAProp}</td>
<td>{data.apiBProp}</td>
</tr>
);
}
return (
<table>
{ tableDataSet.map(renderTableRow) }
</table>
);
}
请注意,可能有更有效的方法来执行此操作,具体取决于您获取数据的方式和响应的内容,但是假设我的假设基于您提供的信息是正确的,这里提供的概念应该可以解决问题。
推荐阅读
- c# - 如何同时移动每个游戏对象?
- javascript - 每当我单击闪电组件销售人员中的提交按钮时,我都会收到提示刷新页面的错误
- machine-learning - 机器学习+神经层=深度学习?
- django - 如果用户已登录,如何停用注册?
- python - Python 3 scrapy 调试:已爬网 (302)
(参考:https...) - python - numpy.median.reduceat 的快速替代方案
- reactjs - 使用 React 处理大量受控输入
- data-structures - 实现链表时发生可变借用错误,其中在 Rust 中将新元素添加到末尾
- c++ - linux mint进程上的代码块以状态-1终止
- java - 将 Map 分配给 ImmutableMap 后,如何停止或限制重新分配另一个地图