[Suggestion]: lazy initialization example can encourage unsafe patterns - show example
Les mainteneurs répondent en général sous 3 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
- Type d'issue
- Documentation
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- javascript, react
- Domaine
- documentation
Piste de recherche
Commencez par la section « lazy initialization » de la page de documentation React liée. Clarifiez que la création de ressources gérées par le cycle de vie pendant le rendu peut être dangereuse lorsqu’un rendu n’est pas validé, et montrez la différence avec la lazy initialization sûre ; c’est terminé lorsque les lecteurs peuvent déterminer quels modèles nécessitent un Effect.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
Show example when lazy initialization example can be unsafe.
Page
https://react.dev/reference/rules/components-and-hooks-must-be-pure#lazy-initialization
Details
The lazy initialization section currently presents this pattern as valid:
function ExpenseForm() {
SuperCalculator.initializeIfNotReady(); // ✅ Good: if it doesn't affect other components
// Continue rendering...
}
However, I think this example is easy to generalize into a dangerous pattern:
if (ref.current === null) {
ref.current = createResource();
}
For resources with a lifecycle - subscriptions, event listeners, timers, connections, etc. - creating the resource during render is unsafe because a render is not guaranteed to result in a committed effect.
For example:
function useLegacyStore() {
const subscriptionRef = useRef(null);
if (subscriptionRef.current === null) {
subscriptionRef.current = store.subscribe(() => {
// ...
});
}
useEffect(() => {
return () => {
subscriptionRef.current?.unsubscribe();
};
}, []);
}
This can appear to work when components only render as part of normal mount/unmount flows. However, with concurrent rendering or APIs such as Activity, React may render a component without subsequently mounting the
Effect associated with that render.
The subscription has already been created, while its cleanup is tied to an Effect that may never run.
The documentation should make this distinction explicit, perhaps by adding a warning/example.
Inspired by:
https://hackernoon.com/react-activity-when-a-render-no-longer-guarantees-an-effect
- Langage dominant
- JavaScript
- Étoiles
- 11.8k
- Forks
- 8k
- Merge moyen
- 3 j 5 h
- PR mergées (30 j)
- 9
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire 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.
Autres issues de reactjs/react.dev
-
[Suggestion]: Document that useFormStatus works with a preventDefault-ed onSubmit + startTransitionPeut-être pris @Felix-ming l’a pris il y a 2 jours. Ouvertetype: documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
reactjs/react.dev#8682 · 1 commentaire ·
Les mainteneurs répondent en général sous 3 jours
-
type: documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
reactjs/react.dev#8661 · 1 commentaire · 7 réactions ·
Les mainteneurs répondent en général sous 3 jours
-
docs: improve useState explanation in quick startPeut-être pris @tirthraj01 l’a pris il y a 26 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 3 jours
-
[Bug]: Next button throws a runtime error instead of cycling to the first sculpturePeut-être pris @Saurav10codes l’a pris il y a 34 jours. Ouvertebug: unconfirmed
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
reactjs/react.dev#8634 · 3 commentaires ·
Les mainteneurs répondent en général sous 3 jours
-
[Typo]: Repeaded words in Pitfall sectionPeut-être pris @mdimamhosen l’a pris il y a 36 jours. Ouvertetype: typos
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
reactjs/react.dev#8622 · 1 commentaire ·
Les mainteneurs répondent en général sous 3 jours
Toutes les issues de reactjs/react.dev
Issues similaires
-
Engineering
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
techmatters/terraso-web-client#3095 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Service process inherits the caller's cwd at first use, holding that folder open on Windows (EBUSY)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
nextcloud/viewer#3424 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour