【发布时间】:2020-02-11 19:05:32
【问题描述】:
我目前正在使用后端的 AWS DynamoDB 创建网站。我从前端调用运行 Lambda 函数的 AWS API Gateway,然后从 DynamoDB 中获取数据。
现在我已经定义了一个具有多个属性的“Item”对象,包括一个“Tags”属性。一个项目可以有多个标签。两者都存储在单独的 DynamoDB 表中,并且 Item 有一个带有 TagID 数组的“Tags”列。每个 TagID 都链接到 Tags 表中的一个 Tag。
问题是,我如何最好地获取一个项目及其对应的标签对象?
当我从前端运行它时,我调用 /items API 来获取我想要的项目。在标签下,我得到了一组 TagID。我希望将这些标签作为实际对象,所以我是否应该简单地调用第二个 API 调用并将 TagID 数组替换为对象?我正在尝试找出在这种情况下的最佳做法。
在我写这篇文章时,也许我应该编辑获取项目的 Lambda 函数,以便它包含 Tag 对象?
这不是我正在做的完全准确的表示,但它应该给你正确的想法。
function Item() {
const [items, setItems] = useState([]);
useEffect(() => {
async function onLoad() {
if (!props.isAuthenticated) {
return;
}
try{
const items = await loadItems();
setItems(items);
/* Should I run my secondary call here? */
} catch(e) {
alert(e);
}
setLoading(false);
}
onLoad();
}, [props.isAuthenticated]);
function loadItems() {
return API.get('nh', '/items');
}
}
Item.propTypes = {
itemId: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
description: PropTypes.string.isRequired,
category: PropTypes.string.isRequired,
tags: PropTypes.arrayOf(PropTypes.object)
}
【问题讨论】:
-
那么,当你运行第二个函数时会发生什么?在那个地方你发表了评论
-
@Amir-Mousavi 我还没有实现这个,我真的在寻找最好的方法是什么。现在我在想,评论当前在哪里,创建一个空数组,然后对 /tags 进行 API 调用并按 ID 过滤标签,将它们推送到数组中,然后用新数组替换 Item 上的 TagID包含 Tag 对象。
-
所以,考虑到你只有
isAuthenticated作为钩子依赖,这只能作为componentDidMount工作,你当时需要那些对象(项目和修改的标签)。所以你现在想做什么听起来。除非出现另一个我们现在无法预见的问题。 -
顺便说一句,我建议从依赖项中清除
isAuthenticated,并将其作为您的路由器责任来重定向未经授权的呼叫。
标签: reactjs amazon-web-services amazon-dynamodb aws-api-gateway