In the virtual DOM, onChange is triggered every time the content of the input is changed. In the regular DOM, onChange is only triggered when the input element is blurred.
link to GIF illustrating the behavior
sample project:
source code for the above demo
Why does React trigger onChange events differently for virtual DOM elements?