加载动画在数据返回后不消失怎么办?
我用一个简单的 loading 动画来提升用户体验,数据请求前显示,请求完成后隐藏。但有时候数据明明回来了,loading 还是卡在页面上不消失,特别奇怪。
我试过在 then 里加 isLoading = false,也检查了异步逻辑,但偶尔还是会出问题。是不是哪里没处理好?
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
setIsLoading(true);
fetchData().then(res => {
setData(res);
setIsLoading(false); // 这里有时候好像没生效?
});
}, []);
给你改下代码,加个错误处理:
另外有个更稳妥的写法是用finally,不管成功失败都会执行:
这样写最保险,网络抽风或者接口报错都不会让loading卡住。我之前就因为没处理这个被测试提了好几个bug,都是泪...
简单粗暴的解决方案是加个finally保证loading消失:
另外建议把fetchData包一层try-catch,这样连网络错误都能处理。代码写起来可能像这样:
昨天我才帮同事解决过同样的问题,测试环境好好的线上就出bug,最后发现是API返回502时loading一直转。这种边界情况不处理很容易被测试提缺陷。