За выходные мы выпустили первый (и надеемся последний) пре-релиз React v0.13!
Мы уже немного говорили о грядущих изменениях. Основное — это конечно же поддержка ES6 классов. Подробнее в нашем анонсе беты. Мы очень взволнованы этим событием! Себастьян также написал сегодня утром о некоторых изменениях с ReactElement. Мы надеемся, что изменения, над которыми мы работатли, улучшат производительность и ощущения от разработки.
Пре-релиз доступен для скачивания:
- React
Версия для разработки (с warnings): http://fb.me/react-0.13.0-rc1.js
Минифицированная версия для продакшена: http://fb.me/react-0.13.0-rc1.min.js - React с дополнениями
Версия для разработки (с warnings)s: http://fb.me/react-with-addons-0.13.0-rc1.js
Минифицированная версия для продакшена: http://fb.me/react-with-addons-0.13.0-rc1.min.js - JSX компилятор для браузера
http://fb.me/JSXTransformer-0.13.0-rc1.js
Мы также опубликовали 0.13.0-rc1
версию react
и react-tools
в npm и react
в bower.
Изменения
Ядро React
Критические изменения
- Изменение
props
после того, как элемент был создан, устарело. В dev-режиме вы получите предупреждение; следующие версии React будут включать в себя оптимизации, предполагая, чтоprops
— константа. - Статические методы (определенные в
statics
) больше автоматически не привязываются к компоненту. - Порядок определения
ref
немного изменился так, что ссылка на компонент доступна сразу после вызова методаcomponentDidMount
; это изменение будет заметно, если ваш компонент вызывает родительский коллбэк внутриcomponentDidMount
, а это анти-паттерн и этого следует избегать не смотря ни на что. - Изменения после вызова
setState
теперь всегда применяются в пакетном режиме, а значит асинхронны. Раньше первый вызов, при первом подключении (mount) компонента был синхронным. - Вызов
setState
иforceUpdate
на отключенном (unmounted) компоненте теперь выкидывает предупреждение, вместо исключения. Это помогает избежать проблем с производительностю в промисах. - Доступ к большинству внутренних свойств был полностью удален, включая
this._pendingState
иthis._rootNodeID
.
Новые возможности
- Поддержка ES6 классов для создания компонентов React; подробнее
- Добавлено новое API
React.findDOMNode(component)
, его нужно использовать, вместоcomponent.getDOMNode()
. Базовый класс для компонентов основанных на ES6-классах не имеет методаgetDOMNode
. - Новый стиль для
ref
, позволит использовать коллбэк, вместо названия:<Photo ref={(c) => this._photo = c} />
так можно сослаться на компонент с
this._photo
(вместоref="photo"
что дастthis.refs.photo
) - Первый аргумент метода
this.setState()
может быть функцией, для транзакционных обновлений состояния, напримерthis.setState((state, props) => ({count: state.count + 1}));
Это значит, что вам больше не нужно использовать
this._pendingState
, которого больше нет. - Поддержка итераторов и immutable-js последовательностей в
this.props.children
.
Устаревшее
ComponentClass.type
устарел. Используйте простоComponentClass
, обычно так:element.type === ComponentClass
- Некоторые методы, доступные в компонентах, созданных с помощью
createClass
были удалены, или устарели из-за ES6 классов, например:getDOMNode
,setProps
,replaceState
.
React c дополнениями
Устаревшее
React.addons.classSet
устарел. Эта функциональность может быть заменена некоторыми свободно доступными модулями. Например classnames один из таких модулей.
React Tools
Критические изменения
- При использовании синтаксиса ES6, методы
class
больше не перечисляемы по умолчанию, это требованиеObject.defineProperty
; если вы поддерживаете браузеры, такие как IE8, можно использовать флаг
--target es3
, который восстановит старое поведение.
Новые возможности
- Опция
--target
для команды jsx, позволяет указать версию ECMAScript.-
es5
по умолчанию. -
es3
восстанавливает предыдущее поведение по умолчанию. Также делает использование зарезервированных слов безопасным, напримерthis.static
заменится наthis['static']
для совместимости с IE8.
-
- Преобразования для spread-оператора были также включены.
JSX
Критические изменения
- Изменение затрагивает то, как JSX парсится, особенно использование
>
или}
внутри элемента. Раньше это трансформировалось в строку, теперь это будет ошибка парсинга. Мы выпустим инструмент для поиска и исправления потенциальных проблем в JSX коде.
Автор: hell0w0rd