React has implemented a browser-independent events and DOM system for performance and cross-browser compatibility reasons. We took the opportunity to clean up a few rough edges in browser DOM implementations.
data-*
and aria-*
attributes conform to the specs and should be lower-cased only.style
attribute accepts a JavaScript object with camelCased properties rather than a CSS string. This is consistent with the DOM style
JavaScript property, is more efficient, and prevents XSS security holes.class
and for
are reserved words in JavaScript, the JSX elements for built-in DOM nodes should use the attribute names className
and htmlFor
respectively, (eg. <div className="foo" />
). Custom elements should use class
and for
directly (eg. <my-tag class="foo" />
).onChange
event behaves as you would expect it to: whenever a form field is changed this event is fired rather than inconsistently on blur. We intentionally break from existing browser behavior because onChange
is a misnomer for its behavior and React relies on this event to react to user input in real time. See Forms for more details.value
and checked
, as well as textarea
. More here.