React без ES6¶
Обычно компонент React определяется как простой JavaScript-класс:
1 2 3 4 5 | |
Если вы ещё не работаете с ES6, то можете использовать модуль create-react-class:
1 2 3 4 5 6 | |
API ES6-классов похож на createReactClass() за некоторыми исключениями.
Объявление пропсов по умолчанию¶
С помощью функций и классов ES6 defaultProps определяется как свойство самого компонента:
1 2 3 4 5 6 7 | |
При использовании createReactClass() вам нужно определить метод getDefaultProps() в переданном объекте:
1 2 3 4 5 6 7 8 9 | |
Установка начального состояния¶
В ES6-классах вы можете определять начальное состояние через this.state в конструкторе:
1 2 3 4 5 6 7 | |
При использовании createReactClass() вам придётся отдельно реализовать метод getInitialState, который возвращает начальное состояние:
1 2 3 4 5 6 | |
Автоматическая привязка¶
В компонентах React, объявленных как классы ES6, методы следуют той же семантике, что и обычные классы ES6. Это означает, что они сами по себе не связывают this с экземпляром. Вам придётся явно использовать .bind(this) в конструкторе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Если вы используете createReactClass(), то это необязательно, так как все методы будут связаны:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Это означает, что ES6-классы пишутся с чуть большим количеством однообразного кода для обработчиков событий, зато производительность громоздких приложений немного возрастает.
Если универсальный код для вас слишком неприглядный, вы можете включить экспериментальный синтаксис свойств класса с помощью Babel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Обратите внимание, что приведённый выше синтаксис является экспериментальным и может измениться. Возможно, предложенный синтаксис не войдёт в стандарт.
Существует несколько безопасных вариантов:
- привязывайте методы в конструкторе.
- используйте стрелочные функции, например,
onClick={(e) => this.handleClick(e)}. - продолжайте использовать
createReactClass;
Примеси¶
Примечание:
ES6 запущен без поддержки примесей. Поэтому React не поддерживает примеси с классами ES6.
Кроме того, мы нашли множество проблем в кодовых базах, используя примеси, и не рекомендуем использовать их в коде.
Этот раздел существует только для справки.
Иногда очень разные компоненты могут иметь общую функциональность. Иногда это называют сквозной функциональностью. createReactClass позволяет использовать для этого устаревшую систему mixins.
Одним из распространённых вариантов использования — когда вы собираетесь обновлять компонент через какой-то промежуток времени. Можно просто использовать setInterval(), но важно отменить процесс, когда он больше не нужен, чтобы сэкономить память. React предоставляет методы жизненного цикла, которые позволяют узнать, когда компонент будет создан или уничтожен. Давайте применим эти методы и создадим небольшую примесь, которая предоставляет функцию setInterval() и автоматически очищает мусор, когда компонент уничтожается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Если компонент использует несколько примесей и они определяют один и тот же метод жизненного цикла (т.е. хотят выполнить некоторую очистку при уничтожении компонента), все методы жизненного цикла гарантированно будут вызваны. Методы, определённые на примесях, запускаются в том порядке, в котором они перечислены, а затем вызывается метод самого компонента.