Ricerca…


introduzione

Argomento per note importanti su comportamento specifico del metodo Component.render.

Funzioni in JSX

Per prestazioni migliori è importante evitare l'uso della funzione array (lambda) in JSX.

Come spiegato su https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md :

Una funzione di bind call o arrow in un puntello JSX creerà una nuova funzione su ogni singolo rendering. Ciò non è positivo per le prestazioni, poiché il garbage collector viene richiamato molto più del necessario. Può anche causare ri-rendering inutili se una funzione nuova di zecca viene passata come supporto a un componente che utilizza il controllo di uguaglianza di riferimento sul puntello per determinare se deve essere aggiornato.

Quindi se hai un blocco di codice jsx come questo:

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

o

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

puoi renderlo migliore:

                    <TextInput
                      onChangeValue={  this.handleValueChanging }
                    />

e

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

Per il contesto corretto all'interno della funzione handleValueChanging puoi applicarlo nel costruttore del componente:

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

più nel legare una funzione passata a un componente

Oppure puoi usare soluzioni come questa: https://github.com/andreypopp/autobind-decorator e aggiungi semplicemente @autobind decorator a ogni methos che vuoi associare a:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow