[Bug]: cache doesn't return the same refrence to a resolved promise
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 11.8k
- Forks
- 7.9k
- Merge moyen
- 1 j 11 h
- PR mergées (30 j)
- 11
Description
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")
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la page de référence de cache et reproduisez l’exemple fourni de use(getData()) afin de comparer le comportement documenté avec React 19. Vérifiez si l’exemple ou son explication décrit correctement l’identité de la promise pour la même entrée ; le travail est terminé lorsque le comportement d’infinite-fetch signalé est soit résolu, soit clairement expliqué dans la documentation concernant l’utilisation prise en charge.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, react
- Domaine
- documentation
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100