Recherche…


Introduction

Sujet pour des notes importantes sur le comportement spécifique de la méthode Component.render.

Fonctions dans JSX

Pour de meilleures performances, il est important d'éviter d'utiliser la fonction array (lambda) dans JSX.

Comme expliqué à l' adresse https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md :

Un appel de liaison ou une fonction de flèche dans un accessoire JSX créera une nouvelle fonction sur chaque rendu. Cela est mauvais pour les performances, car le récupérateur de mémoire sera plus sollicité que nécessaire. Cela peut également entraîner des rendus inutiles si une nouvelle fonction est transmise en tant que prop à un composant qui utilise la vérification d'égalité de référence sur le prop pour déterminer s'il doit être mis à jour.

Donc, si jsx bloque le code comme ceci:

                    <TextInput
                      onChangeValue={  value => this.handleValueChanging(value) }
                    />

ou

                    <button onClick={ this.handleClick.bind(this) }></button>

vous pouvez le rendre meilleur:

                    <TextInput
                      onChangeValue={  this.handleValueChanging }
                    />

et

                    <button onClick={ this.handleClick }></button>

Pour un contexte correct dans la fonction handleValueChanging, vous pouvez l'appliquer dans le constructeur du composant:

          constructor(){
            this.handleValueChanging = this.handleValueChanging.bind(this)
          }

plus en liant une fonction passée à un composant

Ou vous pouvez utiliser des solutions comme celle-ci: https://github.com/andreypopp/autobind-decorator et ajouter simplement @autobind decorator à chaque méthode à laquelle vous souhaitez vous connecter:

        @autobind
        handleValueChanging(newValue)
        {
            //processing event
        }


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow