javascript - 在 React Native 中延迟 setState
问题描述
在我的应用程序中,它有一个刷新组件。所以我使用了 react-native-pull-to-refresh组件。在该文档中,它提到_refresh
已设置为 2000 延迟。
_refresh: function() {
return new Promise((resolve) => {
setTimeout(()=>{resolve()}, 2000)
});
但我想在 2000 延迟后重新渲染屏幕。
我想出什么
_refresh(context) {
let promise = new Promise((resolve) => {
setTimeout(() => {
resolve()
}, 2000);
setTimeout(() => {
this.updateUI();
this.setState({ refreshing: true });
}, 2000);
})
return promise
}
现在当我拉下屏幕时,它不会停留 2 秒(刷新动画不会停留 2 秒)而是立即隐藏并刷新 UI。
问题
我在这里想念什么?如何将刷新动画保持 2 秒,然后调用函数this.updateUI();
和this.setState({ refreshing: true });
解决方案
来自 github 中的示例:
_refresh () {
// you must return Promise everytime
return new Promise((resolve) => {
setTimeout(()=>{
// some refresh process should come here
this.setState({cards: this.state.cards.concat([this.state.cards.length + 1])})
resolve();
}, 2000)
})
}
看来您可能正在解决诺言,然后尝试做更多……在调用更新函数之前,诺言不应该解决。所以我会尝试这样的事情:
_refresh(context) {
let promise = new Promise((resolve) => {
setTimeout(() => {
this.updateUI();
this.setState({ refreshing: true });
resolve()
}, 2000);
})
return promise
}
推荐阅读
- snowflake-cloud-data-platform - 如何在雪花中插入dd/mm/yyyy hh:mm形式的数据
- c++ - 是否可以在 C++ 中调用没有直接引用的函数?
- security - Liberty 服务器:isUserInRole 始终返回 false
- collision-detection - 如何检测 Godot 中的碰撞?
- spring-boot - 创建 Spring Boot 项目和 Maven
- php - 使用 XDebug 进行调试时,如何定义 PHP 对象在 VSCode 中的显示方式?
- python - 'numpy.float64' 类型的对象没有 len():我该如何解决这个问题?
- oculus - 如何在 Oculus Quest 浏览器中自动打开链接?
- r - 以向量化方式基于数据子集定义多行
- firebase - 从子集合 firestore + FLUTTER 中检索信息