I’m excited to announce that today we’re releasing React v0.9, which incorporates many bug fixes and several new features since the last release. This release contains almost four months of work, including over 800 commits from over 70 committers!

Thanks to everyone who tested the release candidate; we were able to find and fix an error in the event handling code, we upgraded envify to make running browserify on React faster, and we added support for five new attributes.

As always, the release is available for download from the CDN:

React

Dev build with warnings: https://fb.me/react-0.9.0.js

Minified build for production: https://fb.me/react-0.9.0.min.js

Dev build with warnings: https://fb.me/react-0.9.0.js Minified build for production: https://fb.me/react-0.9.0.min.js React with Add-Ons

Dev build with warnings: https://fb.me/react-with-addons-0.9.0.js

Minified build for production: https://fb.me/react-with-addons-0.9.0.min.js

Dev build with warnings: https://fb.me/react-with-addons-0.9.0.js Minified build for production: https://fb.me/react-with-addons-0.9.0.min.js In-Browser JSX Transformer

https://fb.me/JSXTransformer-0.9.0.js

We’ve also published version 0.9.0 of the react and react-tools packages on npm and the react package on bower.

This version includes better support for normalizing event properties across all supported browsers so that you need to worry even less about cross-browser differences. We’ve also made many improvements to error messages and have refactored the core to never rethrow errors, so stack traces are more accurate and Chrome’s purple break-on-error stop sign now works properly.

We’ve also added to the add-ons build React.addons.TestUtils, a set of new utilities to help you write unit tests for React components. You can now simulate events on your components, and several helpers are provided to help make assertions about the rendered DOM tree.

We’ve also made several other improvements and a few breaking changes; the full changelog is provided below.

JSX Whitespace

In addition to the changes to React core listed below, we’ve made a small change to the way JSX interprets whitespace to make things more consistent. With this release, space between two components on the same line will be preserved, while a newline separating a text node from a tag will be eliminated in the output. Consider the code:

< div > Monkeys: {listOfMonkeys} {submitButton} </ div >

In v0.8 and below, it was transformed to the following:

React . DOM . div ( null , " Monkeys: " , listOfMonkeys , submitButton )

In v0.9, it will be transformed to this JS instead:

React . DOM . div ( null , "Monkeys:" , listOfMonkeys , " " , submitButton )

We believe this new behavior is more helpful and eliminates cases where unwanted whitespace was previously added.

In cases where you want to preserve the space adjacent to a newline, you can write {'Monkeys: '} or Monkeys:{' '} in your JSX source. We’ve included a script to do an automated codemod of your JSX source tree that preserves the old whitespace behavior by adding and removing spaces appropriately. You can install jsx_whitespace_transformer from npm and run it over your source tree to modify files in place. The transformed JSX files will preserve your code’s existing whitespace behavior.

Changelog

React Core

Breaking Changes

The lifecycle methods componentDidMount and componentDidUpdate no longer receive the root node as a parameter; use this.getDOMNode() instead

and no longer receive the root node as a parameter; use instead Whenever a prop is equal to undefined , the default value returned by getDefaultProps will now be used instead

, the default value returned by will now be used instead React.unmountAndReleaseReactRootNode was previously deprecated and has now been removed

was previously deprecated and has now been removed React.renderComponentToString is now synchronous and returns the generated HTML string

is now synchronous and returns the generated HTML string Full-page rendering (that is, rendering the <html> tag using React) is now supported only when starting with server-rendered markup

tag using React) is now supported only when starting with server-rendered markup On mouse wheel events, deltaY is no longer negated

is no longer negated When prop types validation fails, a warning is logged instead of an error thrown (with the production build of React, type checks are now skipped for performance)

On input , select , and textarea elements, .getValue() is no longer supported; use .getDOMNode().value instead

, , and elements, is no longer supported; use instead this.context on components is now reserved for internal use by React

New Features

React now never rethrows errors, so stack traces are more accurate and Chrome’s purple break-on-error stop sign now works properly

Added support for SVG tags defs , linearGradient , polygon , radialGradient , stop

, , , , Added support for more attributes: crossOrigin for CORS requests download and hrefLang for <a> tags mediaGroup and muted for <audio> and <video> tags noValidate and formNoValidate for forms property for Open Graph <meta> tags sandbox , seamless , and srcDoc for <iframe> tags scope for screen readers span for <colgroup> tags

Added support for defining propTypes in mixins

in mixins Added any , arrayOf , component , oneOfType , renderable , shape to React.PropTypes

, , , , , to Added support for statics on component spec for static component methods

on component spec for static component methods On all events, .currentTarget is now properly set

is now properly set On keyboard events, .key is now polyfilled in all browsers for special (non-printable) keys

is now polyfilled in all browsers for special (non-printable) keys On clipboard events, .clipboardData is now polyfilled in IE

is now polyfilled in IE On drag events, .dataTransfer is now present

is now present Added support for onMouseOver and onMouseOut in addition to the existing onMouseEnter and onMouseLeave events

and in addition to the existing and events Added support for onLoad and onError on <img> elements

and on elements Added support for onReset on <form> elements

on elements The autoFocus attribute is now polyfilled consistently on input , select , and textarea

Bug Fixes

React no longer adds an __owner__ property to each component’s props object; passed-in props are now never mutated

property to each component’s object; passed-in props are now never mutated When nesting top-level components (e.g., calling React.renderComponent within componentDidMount ), events now properly bubble to the parent component

within ), events now properly bubble to the parent component Fixed a case where nesting top-level components would throw an error when updating

Passing an invalid or misspelled propTypes type now throws an error

On mouse enter/leave events, .target , .relatedTarget , and .type are now set properly

, , and are now set properly On composition events, .data is now properly normalized in IE9 and IE10

is now properly normalized in IE9 and IE10 CSS property values no longer have px appended for the unitless properties columnCount , flex , flexGrow , flexShrink , lineClamp , order , widows

appended for the unitless properties , , , , , , Fixed a memory leak when unmounting children with a componentWillUnmount handler

handler Fixed a memory leak when renderComponentToString would store event handlers

would store event handlers Fixed an error that could be thrown when removing form elements during a click handler

Boolean attributes such as disabled are rendered without a value (previously disabled="true" , now simply disabled )

are rendered without a value (previously , now simply ) key values containing . are now supported

values containing are now supported Shortened data-reactid values for performance

values for performance Components now always remount when the key property changes

property changes Event handlers are attached to document only when necessary, improving performance in some cases

only when necessary, improving performance in some cases Events no longer use .returnValue in modern browsers, eliminating a warning in Chrome

in modern browsers, eliminating a warning in Chrome scrollLeft and scrollTop are no longer accessed on document.body, eliminating a warning in Chrome

and are no longer accessed on document.body, eliminating a warning in Chrome General performance fixes, memory optimizations, improvements to warnings and error messages

React with Addons

React.addons.TestUtils was added to help write unit tests

was added to help write unit tests React.addons.TransitionGroup was renamed to React.addons.CSSTransitionGroup

was renamed to React.addons.TransitionGroup was added as a more general animation wrapper

was added as a more general animation wrapper React.addons.cloneWithProps was added for cloning components and modifying their props

was added for cloning components and modifying their props Bug fix for adding back nodes during an exit transition for CSSTransitionGroup

Bug fix for changing transitionLeave in CSSTransitionGroup

in CSSTransitionGroup Performance optimizations for CSSTransitionGroup

On checkbox <input> elements, checkedLink is now supported for two-way binding