javascript - 从 this.props 渲染 React 承诺
问题描述
我是 React 的新手,所有这些都承诺。因此,我正在努力在组件中呈现基于 Promise 的道具。
基本上我有一个包含所有逻辑和所需 API 调用的组件。在渲染中,我提供了一个按钮来显示和隐藏模式窗口以显示一些内容。内容是通过多个返回承诺的 API 调用获取的 -> 它们作为承诺数组存储在状态中。
模态窗口是另一个组件,我将状态作为道具传递给它。在渲染方法中,我将 this.props 中的数组映射到 <Text> 项中。
不幸的是,这会导致错误:
错误:对象作为 React 子对象无效(找到:带有键 {_U、_V、_W、_X} 的对象)。如果您打算渲染一组子项,请改用数组。
据我了解这个错误,react 试图呈现 Promise 对象本身,而不是父组件中 API 调用的结果。
如何呈现将道具传递给组件的承诺?
我在代码沙盒上创建了一个示例,模拟我正在尝试做的事情: https ://codesandbox.io/s/crazy-microservice-fcgoy?file=/src/modal_component.js
解决方案
您必须处理返回的承诺,如下所示:
buttonOnClick() {
const ids = [1, 2, 3, 4, 5];
const resolvedNamesPromises = ids.map((element) => {
// resolveName returns a promise
return this.resolveName(element);
});
Promise.all(resolvedNamesPromises).then(names => {
this.setState({
modal: {
show: true,
names
}
});
});
}
我建议通过阅读此处了解更多关于 Promise 的信息。这里还有Promise.all参考文档。
推荐阅读
- c# - 为什么在 IL 代码中找不到委托的 Invoke 方法体?
- java - 使用 Spring Boot 测试与 Postman 的 OneToMany 关系时出错
- python - 从现有的 drf 模型视图集中删除特定操作
- java - 如何检查给定的表达式是否是有效的数学表达式?
- machine-learning - 有没有像「scaler.inverse_transform()」这样的方法来获取部分缩放器参数来反规范化答案?
- java - 我可以设置多个 .whereEqualTo 指向 firestore 查询中文档中的一个字段吗?
- android - 为什么 view.height 比实际高度大 3 倍?
- python - Slack Bot - Python 松弛发送降价消息
- java - 使用 Kotlin Kapt 失败:错误:范围构造不能使用类型使用注释进行注释:@org.jetbrains.annotations.NotNull
- django - 使用 drf django 发送邮件