[Bug]: cache doesn't return the same refrence to a resolved promise
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 11.8k
- 派生
- 7.9k
- 平均合并
- 1 天 11 小时
- 30 天内合并 PR
- 11
描述
Summary
The cache function generates a new promise reference on every call, causing the use hook to treat it as a new dependency. This results in an infinite fetch loop as getData() is continuously invoked on each render.
Page
https://react.dev/reference/react/cache
Details
The following code demonstrates an issue with the cache function, which leads to an infinite fetch loop when used with use
'use client';
import { use, cache } from "react";
export const getData = cache(() => fetch("https://jsonplaceholder.typicode.com/posts").then(res => res.json()));
export function Home() {
const data = use(getData());
return (
<pre>{JSON.stringify(data)}</pre>
);
};
Problem
The cache function is expected to memoize the result of a function call. However, it appears to return a new promise reference every time getData() is called, which causes the use hook to treat it as a new input on every render. This results in an infinite fetch loop.
Expected Behavior
The cache function should return the same promise reference for the same input, ensuring that use(getData()) only triggers a single fetch request.
Actual Behavior
Maybe the cache function creates a new promise reference on each call, leading to an infinite loop of fetch requests.
Environment
React version: >=19 ("^19.0.0")
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 cache 参考页面开始,复现提供的 use(getData()) 示例,以将文档中描述的行为与 React 19 进行比较。检查示例或其说明是否准确描述了相同输入的 promise identity;当报告的 infinite-fetch 行为得到解决,或文档清楚地解释了受支持的用法时,即视为完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, react
- 领域
- documentation
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 38/100