RNBW.wiki
🇨🇳
🇷🇺Русский 🇬🇧English 🇪🇸Español 🇨🇳中文 🇩🇪Deutsch

全部内容

三行代码治好卡住的刷新图标——而补丁打在 React Native 身上

2026 年 10 月 15 日

三行代码治好卡住的刷新图标——而补丁打在 React Native 身上

改动 #7873 已于 10 月 14 日并入。它极小:一个文件,加了 21 行、删了 4 行,其中真正的代码只有三行。有意思的不是它的大小,而是它所在的位置。

他们改的不是自己的应用,而是 React Native

文件名叫 patches/react-native+0.81.6.patch。这是打在应用所依赖的平台源码上的补丁。当问题不在自己的代码里、而在更下层,又等不起上游修复时,就会这么做。

原先的问题

把列表往下一拉,刷新开始。你切到另一个页面。刷新在那个页面离开视野期间完成了。回来一看——刷新图标还展开着挂在那里,而且再也不会收回去。

为什么会这样

刷新结束时,应用连着做两件事:先在自己这边记下「刷新已结束」,再请系统把图标收走。而这个请求一上来就有一道检查:如果页面此刻不在视野里,就悄悄返回,什么都不做。

就这样。记号已经记下了,所以这条路再也不会被走第二遍:要再进来,得状态发生变化,可状态已经变过了。而系统那边,始终停在「正在刷新」的位置上。

最耐人寻味的是,为什么这么多年没人察觉。 反方向的动作,也就是启动,是有兜底的:刷新若没来得及开始,会在第一次重绘时重新启动。也就是说,「没来得及开始」这种情况被想到了,「没来得及结束」却没有。

补上了什么

在页面回到视野的那一刻加了三行:如果按我们自己的记录刷新已经结束,而系统仍认为它在进行,那就把它停掉。被推迟的那个请求,恰好在当初让它落空的条件终于成立时触发。

这份严谨值得一提

同一个文件里原本已经有另一个补丁,关于圆角。作者没有把自己的那块直接贴在旁边,而是重写了文件头,把两条记录分开:现在每一条都带着自己可以被移除的条件。

给别人的库打补丁是一笔债。把清偿条件写下来,一年之后才没人害怕去动它。

影响谁

任何靠下拉刷新的列表。不是某一个板块,而是整个应用——这样的改动最近几周并不多见。

应用里已经有了吗

还没有。最新发布的版本是 10 月 8 日的 2.0.46,而这项改动是 14 日并入的。它会出现在哪个版本里,Rainbow 不会提前公布。

钱包代码里正在发生什么变化:rnbw.wiki/pulse

$RNBW #RNBW

这些内容同时发布在频道 @RNBWwiki.