javascript - Reactjs 仅在其所有子组件完成渲染时才渲染组件
问题描述
我的一个页面中有一个“缓慢”的加载问题。该页面包含一个“根”组件——我们称之为它Container
。
我的容器对fetch
下拉列表中的值选择进行了 2 次调用。获取的数据 (A
和B
) 被传递给子组件 ( Board
)。
Board 由 2 个不相关的组件构成 -它们分别使用Player
和作为初始数据。Item
A
B
碰巧Player
s 渲染过程比Item
's 重得多。
结果是 Item 在页面上呈现,几秒钟后 Player 也被呈现。
我的愿望是同时看到两个渲染 - 我怎样才能实现呢?
我想这是应该做的,Board
但是怎么做呢?
同样重要的是,每次下拉列表中的值更改时都会发生这种“等待”(它总是供用户选择)。
谢谢!
解决方案
有几种方法可以做到这一点。
1)使用graphql来编排数据的加载,使得页面在所有数据都可用时渲染
2) 设置 playerDataReady 和 itemDataReady 的状态值。如果其中任何一个为假,则显示加载微调器。当它们都为真时(由于 ajax 调用被解析),那么渲染将同时进行
在构造函数中...
state = {
playerDataReady: false,
itemDataReady: false,
}
:
:
componentDidMount() {
// Request player data, using axios or fetch
axios.get(...)
.then(data) {
this.data = data
this.setState({playerDataReady:true})
}
// Do the same for your item data (and update itemDataReady)
}
在您的渲染功能中:
render() {
if (!playerDataReady || !itemDataReady) {
return <Loader/>
// The data has arrived, so render it as normal...
return ....
您可以填写详细信息
推荐阅读
- java - 在java中将一种原始类型转换为另一种
- c# - 必填字段验证错误消息适用于文本框,但不适用于下拉列表
- gradle - 无法编译 cordapp-example
- reactjs - 使用 Firebase 和 redux 在 React Native 中加载组件
- python - 根据 pandas 列中的数据合并行条目
- python - Python OpenCV DrawContours
- user-interface - setState() 清除表单元素数据flutter中的数据
- hadoop - 无法在 hive 表中加载数据,表由分区创建。告诉我'hive.partition 没有
- docker - docker 程序的进程所有者
- go - 当参数不是go中的指针时,使用反射通过引用更新值