Maison >interface Web >js tutoriel >Pourquoi ma fonction React `onClick` se déclenche-t-elle pendant le rendu ?

Pourquoi ma fonction React `onClick` se déclenche-t-elle pendant le rendu ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-16 13:55:03314parcourir

Why Does My React `onClick` Function Fire During Rendering?

Comprendre l'exécution prématurée de la fonction onClick de React

Dans React, il est crucial de comprendre pourquoi la fonction onClick peut se déclencher pendant le rendu. Ce phénomène peut se produire lors de la transmission de valeurs aux composants enfants.

Problème :

Lors du mappage sur une liste d'objets et de l'utilisation de la fonction map() pour les afficher, le Le bouton associé à chaque objet invoque la fonction onClick prématurément lors rendu.

Cause :

La clé de ce problème réside dans la manière dont la fonction onClick est transmise. Dans le code fourni, la ligne suivante est responsable de ce comportement :

<button type="submit" onClick={this.props.removeTaskFunction(todo)}>

Ici, l'attribut onClick appelle directement la fonction en ajoutant des parenthèses. Cela signifie que le gestionnaire onClick est exécuté immédiatement, provoquant l'exécution de la fonction pendant le rendu.

Solution :

Pour éviter une exécution prématurée, vous devez transmettre la fonction elle-même à onClick au lieu de l'invoquer. Ceci peut être réalisé en utilisant une fonction de flèche, introduite dans ES6. Voici le code corrigé :

<button type="submit" onClick={() => this.props.removeTaskFunction(todo)}>

Explication :

Dans cette ligne, nous utilisons une fonction flèche pour définir une fonction anonyme concise qui est transmise à onClick. Lorsque vous cliquez sur le bouton, la fonction fléchée invoquera alors la fonction removeTaskFunction avec l'objet todo. Cette approche garantit que la fonction onClick n'est déclenchée que lorsque le bouton est cliqué, pas pendant le rendu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn