Sembra che non ci sia una reale differenza
React, per qualche motivo, collega i listener per all'evento Component.onChange
DOM element.oninput
. Vedere la nota nella documentazione sui moduli:
React docs - Moduli
Ci sono più persone che sono sorprese da questo comportamento. Per maggiori dettagli, fai riferimento a questo problema nel tracker dei problemi di React:
Documenta come onChange di React si riferisce a onInput # 3964
Citazione dai commenti su quel problema:
Non capisco perché React abbia scelto di fare in modo che onChange si comporti come fa onInput. Per quanto ne so, non abbiamo modo di recuperare il vecchio comportamento di onChange. I documenti affermano che è un "nome improprio" ma non lo è davvero, si attiva quando c'è un cambiamento, solo non finché l'input non perde il focus.
Per la convalida, a volte non vogliamo mostrare errori di convalida finché non hanno terminato di digitare. O forse semplicemente non vogliamo un re-rendering su ogni battitura. Ora l'unico modo per farlo è con onBlur, ma ora dobbiamo anche controllare che il valore sia cambiato manualmente.
Non è un grosso problema, ma mi sembra che React abbia gettato via un evento utile e abbia deviato dal comportamento standard quando c'era già un evento che lo fa.
Sono d'accordo al 100% con il commento ... Ma immagino che cambiarlo ora porterebbe più problemi di quanti ne risolva poiché era già stato scritto così tanto codice che si basa su questo comportamento.
React non fa parte della raccolta Web API ufficiale
Anche se React è costruito su JS e ha visto un enorme tasso di adozione, poiché una tecnologia React esiste per nascondere un sacco di funzionalità sotto la sua (piuttosto piccola) API. Una volta che l'area in cui questo è ovvio è nel sistema degli eventi, dove c'è molto da fare sotto la superficie che in realtà è radicalmente diverso dal sistema di eventi DOM standard. Non solo in termini di quali eventi fanno cosa, ma anche in termini di quando i dati possono persistere in quale fase della gestione dell'evento. Puoi leggere altro a questo proposito qui:
React Event System