2014-11-08 3 views
6

La documentazione per i reactjs isMounted API afferma che:ReactJS: Quando deve essere impostato setState da isMounted?

È possibile utilizzare questo metodo per custodire le chiamate asincrone a setState() o forceUpdate().

La mia domanda primaria è quando dovrebbe una chiamata a setState() da sorvegliato da una chiamata a isMounted()?

Nel Initial AJAX Tutorialhttp://facebook.github.io/react/tips/initial-ajax.html il setState utilizzato nel callback XHR utilizza la guardia isMounted(), ma questo è necessario?

Una domanda secondaria è, se è richiesta, perché è così? Sembra che il controllo in sé sia ​​molto semplice e potrebbe essere inserito nello setState() senza alcuna significativa penalizzazione delle prestazioni, ma con una grande semplificazione nell'utilizzo dell'API.

risposta

4

Logicamente, isMounted è necessario se il componente può essere smontato quando viene richiamato il callback.

La procedura consigliata è evitare questo in componentWillUnmount, ad es. interruzione di una richiesta Ajax, annullamento di un timeout o annullamento dell'iscrizione da un evento.

Probabilmente l'API è più semplice in questo modo perché setState non fallisce in modo silenzioso se viene chiamato in un momento inappropriato. Fallire silenziosamente causa un sacco di bug difficili da rintracciare.