页面同时发三个请求,骨架屏在 1.2 秒内闪了 6 次,先回来的把 loading 置 false,后两个又把页面切回骨架。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,三个请求共用一个 isLoading 布尔值,任何一个完成就关掉,另一个开始又打开。请求各自 setState,状态互相覆盖。

「并发请求加载态」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

const fetching = useIsFetching();
{fetching > 0 ? <Skeleton /> : <List />}

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

具体做法是,用 useIsFetching 或计数器统计在途请求数;全部结束才撤骨架 不要单个完成就切;给骨架加 200ms 延迟 避免一闪而过;观察首屏切换次数 应该只有一次。

最后用这个标准收尾,首屏只出现一次骨架,三个请求全部结束后才切到内容,闪烁次数为 0。

作者 9823189