2016-03-03 9 views
13

Sto lavorando a un progetto React Native e sto utilizzando le classi ES6 per i componenti React.React.js - utilizzo di inizializzatori di proprietà per tutti i metodi dei componenti

Poiché i componenti React definiti tramite classi ES6 non dispongono di autobinding, il team React recommends combina gli inizializzatori di proprietà ES7 con le funzioni freccia per creare lo stesso effetto.

Al fine di essere coerenti e prevenire la confusione con questo impegno, sto usando inizializzatori di proprietà ES7 per tutti i metodi di componenti:

class Foo extends React.Component { 
    constructor(props) { 
    super(props); 
    ... 
    } 

    componentDidMount =() => { 
     ... 
    }; 

    bar =() => { 
    ... 
    }; 

    render =() => { 
    ... 
    }; 
} 

Mi chiedevo - ci sono avvertimenti di prestazioni gravi di essere a conoscenza di ? In particolare, mi sto interrogando sul metodo render().

Nel complesso, questo sembra un buon approccio?

risposta

10

L'avvertimento più grande è che questa particolare caratteristica non è standard né concordata. (Non sarà ES7 poiché non esiste ES7. Forse ES2017 ma non è ancora chiaro.)

C'è anche un costo per allocare diversi nuovi oggetti di lunga durata e memorizzarli sulla classe.

Non lo raccomanderei. Solo per le richiamate.

+0

Grazie per il feedback! – ender672

+1

Seguito rapido: il mio team ha deciso di utilizzare il metodo bind() per i callback e per il momento stiamo tenendo fuori gli inizializzatori delle proprietà con le funzioni freccia. La tua risposta ci ha aiutato a prendere questa decisione. – ender672