Skip to content

Releases: facebook/react

v0.9.0

04 Mar 23:10
Compare
Choose a tag to compare

What’s New?

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 elimates 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
  • Whenever a prop is equal to undefined, the default value returned by getDefaultProps will now be used instead
  • React.unmountAndReleaseReactRootNode was previously deprecated and has now been removed
  • React.renderComponentToString 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
  • On mouse wheel events, deltaY 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

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
  • Added any, arrayOf, component, oneOfType, renderable, shape to React.PropTypes
  • Added support for statics on component spec for static component methods
  • On all events, .currentTarget is now properly set
  • On keyboard events, .key is now polyfilled in all browsers for special (non-printable) keys
  • On clipboard events, .clipboardData is now polyfilled in IE
  • On drag events, .dragTransfer is now present
  • Added support for onMouseOver and onMouseOut in addition to the existing onMouseEnter and onMouseLeave events
  • Added support for onLoad and onError on <img> elements
  • Added support for onReset on <form> 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
  • When nesting top-level components (e.g., calling React.renderComponent within componentDidMount), 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
  • On composition events, .data 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
  • Fixed a memory leak when unmounting children with a componentWillUnmount handler
  • Fixed a memory leak when renderComponentToString 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)
  • key values containing . are now supported
  • Shortened data-reactid values for performance
  • Components now always remount when the key property changes
  • Event handlers are attached to document only when necessary, improving performance in some cases
  • Events no longer use .returnValue in modern browsers, eliminating a warning in Chrome
  • scrollLeft and scrollTop 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
  • React.addons.TransitionGroup was renamed to React.addons.CSSTransitionGroup
  • React.addons.TransitionGroup was added as a more general animation wrapper
  • React.addons.cloneWithProps 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
  • Performance optimizations for CSSTransitionGroup
  • On checkbox <input> elements, checkedLink is now supported for two-way binding

JSX Compiler and react-tools Package

  • Whitespace normalization has changed; now space between two tags on the same line will be preserved, while newlines between two tags will be removed
  • The react-tools npm package no longer includes the React core libraries; use the react package instead.
  • displayName is now added in more cases, improving error messages and names in the React Dev Tools
  • Fixed an issue where an invalid token error was thrown after a JSX closing tag
  • JSXTransformer now uses source maps automatically in modern browsers
  • JSXTransformer error messages now include the filename and problematic line contents when a file fails to parse

v0.9.0-rc1

18 Apr 22:48
Compare
Choose a tag to compare
0.9.0-rc1

v0.8.0

20 Dec 05:53
Compare
Choose a tag to compare

Now installable via npm!

$ npm install react

React

  • Added support for more attributes:
    • rows & cols for <textarea>
    • defer & async for <script>
    • loop for <audio> & <video>
    • autoCorrect for form fields (a non-standard attribute only supported by mobile WebKit)
  • Improved error messages
  • Fixed Selection events in IE11
  • Added onContextMenu events

React with Addons

  • Fixed bugs with TransitionGroup when children were undefined
  • Added support for onTransition

react-tools

  • Upgraded jstransform and esprima-fb

JSXTransformer

  • Added support for use in IE8
  • Upgraded browserify, which reduced file size by ~65KB (16KB gzipped)

v0.5.2

19 Dec 17:48
Compare
Choose a tag to compare

Security release to address CVE-2013-7035.

v0.4.2

19 Dec 17:46
Compare
Choose a tag to compare

Security release to address CVE-2013-7035.

v0.5.1

29 Oct 21:55
Compare
Choose a tag to compare

React

  • Fixed bug with <input type="range"> and selection events.
  • Fixed bug with selection and focus.
  • Made it possible to unmount components from the document root.
  • Fixed bug for disabled attribute handling on non-<input> elements.

React with Addons

  • Fixed bug with transition and animation event detection.

v0.5.0

19 Oct 22:14
Compare
Choose a tag to compare

React

  • Memory usage improvements - reduced allocations in core which will help with GC pauses
  • Performance improvements - in addition to speeding things up, we made some tweaks to stay out of slow path code in V8 and Nitro.
  • Standardized prop -> DOM attribute process. This previously resulting in additional type checking and overhead as well as confusing cases for users. Now we will always convert your value to a string before inserting it into the DOM.
  • Support for Selection events.
  • Support for Composition events.
  • Support for additional DOM properties (charSet, content, form, httpEquiv, rowSpan, autoCapitalize).
  • Support for additional SVG properties (rx, ry).
  • Support for using getInitialState and getDefaultProps in mixins.
  • Support mounting into iframes.
  • Bug fixes for controlled form components.
  • Bug fixes for SVG element creation.
  • Added React.version.
  • Added React.isValidClass - Used to determine if a value is a valid component constructor.
  • Removed React.autoBind - This was deprecated in v0.4 and now properly removed.
  • Renamed React.unmountAndReleaseReactRootNode to React.unmountComponentAtNode.
  • Began laying down work for refined performance analysis.
  • Better support for server-side rendering - react-page has helped improve the stability for server-side rendering.
  • Made it possible to use React in environments enforcing a strict Content Security Policy. This also makes it possible to use React to build Chrome extensions.

React with Addons (New!)

  • Introduced a separate build with several "addons" which we think can help improve the React experience. We plan to deprecate this in the long-term, instead shipping each as standalone pieces. Read more in the docs.

JSX

  • No longer transform class to className as part of the transform! This is a breaking change - if you were using class, you must change this to className or your components will be visually broken.
  • Added warnings to the in-browser transformer to make it clear it is not intended for production use.
  • Improved compatibility for Windows
  • Improved support for maintaining line numbers when transforming.

v0.4.1

29 Jul 18:01
Compare
Choose a tag to compare

React

  • setState callbacks are now executed in the scope of your component.
  • click events now work on Mobile Safari.
  • Prevent a potential error in event handling if Object.prototype is extended.
  • Don't set DOM attributes to the string "undefined" on update when previously defined.
  • Improved support for <iframe> attributes.
  • Added checksums to detect and correct cases where server-side rendering markup mismatches what React expects client-side.

JSXTransformer

  • Improved environment detection so it can be run in a non-browser environment.

v0.4.0

19 Jul 19:43
Compare
Choose a tag to compare

React

  • Switch from using id attribute to data-reactid to track DOM nodes. This allows you to integrate with other JS and CSS libraries more easily.
  • Support for more DOM elements and attributes (e.g., <canvas>)
  • Improved server-side rendering APIs. React.renderComponentToString(<component>, callback) allows you to use React on the server and generate markup which can be sent down to the browser.
  • prop improvements: validation and default values. Read our blog post for details...
  • Support for the key prop, which allows for finer control over reconciliation. Read the docs for details...
  • Removed React.autoBind. Read our blog post for details...
  • Improvements to forms. We've written wrappers around <input>, <textarea>, <option>, and <select> in order to standardize many inconsistencies in browser implementations. This includes support for defaultValue, and improved implementation of the onChange event, and circuit completion. Read the docs for details...
  • We've implemented an improved synthetic event system that conforms to the W3C spec.
  • Updates to your component are batched now, which may result in a significantly faster re-render of components. this.setState now takes an optional callback as it's second parameter. If you were using onClick={this.setState.bind(this, state)} previously, you'll want to make sure you add a third parameter so that the event is not treated as the callback.

JSX

  • Support for comment nodes <div>{/* this is a comment and won't be rendered */}</div>
  • Children are now transformed directly into arguments instead of being wrapped in an array
    E.g. <div><Component1/><Component2/></div> is transformed into React.DOM.div(null, Component1(null), Component2(null)).
    Previously this would be transformed into React.DOM.div(null, [Component1(null), Component2(null)]).
    If you were using React without JSX previously, your code should still work.

react-tools

  • Fixed a number of bugs when transforming directories
  • No longer re-write require()s to be relative unless specified

v0.3.3

02 Jul 20:27
Compare
Choose a tag to compare

This release addresses some small issues people were having and simplifies our tools to make them easier to use.

react-tools

  • Upgrade Commoner so require statements are no longer relativized when passing through the transformer. This was a feature needed when building React, but doesn't translate well for other consumers of bin/jsx.
  • Upgraded our dependencies on Commoner and Recast so they use a different directory for their cache.
  • Freeze our esprima dependency.

React

  • Allow reusing the same DOM node to render different components. e.g. React.renderComponent(<div/>, domNode); React.renderComponent(<span/>, domNode); will work now.

JSXTransformer

  • Improved the in-browser transformer so that transformed scripts will execute in the expected scope. The allows components to be defined and used from separate files.