reactjs - 反应阿波罗查询太快了
问题描述
我有一个太快的反应阿波罗查询。在 api 查询完成并显示我的结果之前,它<p>Loading...</p>
会显示一瞬间。有什么办法可以减慢速度或产生轻微的延迟以防止这种内容闪现?
解决方案
我在 Apollo 客户端中没有看到任何可以让您执行此操作的内容。
我想您想要的是Loading
仅在内容太长而无法显示时才显示占位符。除了避免您描述的内容闪烁之外,您还避免了感知性能问题(即,如果有标题,即使需要相同的时间,用户也更有可能觉得某些东西很慢)Loading...
你可以做什么?
解决方案 1:使用本地状态
showLoading
除了从 Apollo 加载 prop 之外,还添加一个状态变量showLoading
仅在时间过长时触发状态
代码示例(带有已经loading
从 Apollo 接收道具的组件) - 以适应您自己的用例......
const SHOW_LOADING_AFTER = 1000
class MyComponent extends React.Component {
constructor(props) {
super(props)
this.state = {
showLoading: false
}
this.loadingTimeout = setTimeout(() => {
this.setState({ showLoading: true })
}, SHOW_LOADING_AFTER)
}
componentWillUnmount() {
clearTimeout(this.loadingTimeout)
}
render() {
if (this.props.loading) {
return this.state.showLoading ? <p>Loading...</p> : null
}
return <p>Ready!</p>
}
}
解决方案 2
使用更高阶的组件或<Timeout>
包装<p>Loading...</p>
在渲染方法中的组件使其通用化以避免污染状态。
您所需要的只是在您的渲染方法中:
if (this.props.loading) {
<Timeout ms={SHOW_LOADING_AFTER}><p>Loading...</p></Timeout>
}
推荐阅读
- unit-testing - 如何使用 mockk.io 模拟内部构造的实例?
- react-native - ios底部的滚动视图截止
- node.js - 如何在 MacOS 上安装 Deno?
- spring - Spring批处理分类器复合项目编写器出错
- paypal - PayPal Plus:抱歉,由于技术原因,目前无法处理任何付款
- javascript - 从单个文本框中分离值
- python - python中的不同变量赋值
- laravel - laravel carbon 之间的日期无法正常工作
- google-app-engine - 谷歌云启动盘空间不匹配
- ssl - HAProxy 443 在 SSL 握手期间出现连接错误