В OpsGenie мы глубоко погрузились в React для нашего проекта Badges. Я узнал много нового и сделал много ошибок. Некоторые из моих знаний субъективны, но я думал, что они могут помочь другим людям изучить React и избежать повторения тех же ошибок. Короче говоря, это то, что мне действительно помогло.
1. По умолчанию setState запускает повторную визуализацию.
По умолчанию React повторяет рендеринг при каждом изменении состояния, и в большинстве случаев на это можно положиться. Однако повторный рендеринг излишне тратит циклы, что не является хорошей практикой.
У каждого компонента есть метод shouldComponentUpdate
, который вызывается каждый раз, когда вы изменяете состояние или передаете новые свойства от родительского элемента. составная часть. React решает, выполнять повторный рендеринг или нет, в соответствии с возвращаемым значением shouldComponentUpdate
.
По умолчанию shouldComponentUpdate
возвращает true, но вы можете переопределить его, чтобы вернуть false для случаев, когда вы не хотите повторного рендеринга. Вот пример:
Важные заметки:
- Неправильная установка
shouldComponentUpdate
или забвение того, что вы установили, может вызвать серьезные проблемы, поскольку ваш компонент может не обновляться должным образом. - Выполнение вычислений в
shouldComponentUpdate
может быть дорогостоящим с точки зрения производительности и усилий, поэтому вы должны убедиться, что оно того стоит. Я настоятельно рекомендую вам использовать React's Performance Tools, чтобы проверить количество потраченных впустую циклов до и после использованияshouldComponentUpdate
. У него очень простое использование:
2. setState
обновляет локальное состояние асинхронно.
Вы должны думать о setState
как о запросе, а не о немедленной команде. Не гарантируется, что изменения состояния применяются сразу после setState
вызова.
Распространенной ошибкой является чтение this.state
сразу после звонка setState
. В общем, использование this.state
внутри метода setState
ненадежно.
Если вам нужно обновить состояние на основе предыдущего состояния, рекомендуется использовать функцию updater
, которая является первым аргументом setState(updater, [callback])
.
Пример передачи функции updater
в setState
:
Бонус: каков второй аргумент, callback
?
Это дополнительная функция обратного вызова, выполняемая после завершения setState
и повторной визуализации компонента. Однако для такой логики рекомендуется componentDidUpdate
вместо callback
в официальной документации.
Для получения более подробной информации рекомендую проверить эту часть официального документа.
3. Жизненный цикл компонентов важен!
Первый шаг к счастливой жизни с компонентами React - это понимание жизненного цикла компонентов. У каждого компонента React есть методы, которые можно использовать для запуска кода в определенные моменты жизненного цикла компонента. Чтобы использовать их правильно, вы должны понимать порядок вызова методов жизненного цикла. Мы можем просто разделить жизненный цикл на три части:
Монтаж: экземпляр компонента создается и вставляется в DOM.
Обновление: компонент повторно обрабатывается, это может быть вызвано изменениями свойств или состояния.
Размонтирование: компонент удаляется из DOM.
Очень важно понимать, как работают эти методы. Этот пост отлично подходит для понимания методов жизненного цикла и их использования. Также настоятельно рекомендую проверить эту часть официальных документов.
4. Используйте componentWillReceiveProps.
Если вы хотите обновить состояние в ответ на изменения реквизита, это тот метод, который вам нужен. Сравните this.props
с nextProps
и, если есть значительное изменение, действуйте в соответствии с ним.
Здесь два важных замечания:
- React может вызвать
componentWillReceiveProps
, даже если свойства не изменились, поэтому сравнениеthis.props
иnextProps
важно. componentWillReceiveProps
вызывается до того, как смонтированный компонент получит новые реквизиты, это означает, что React не вызываетcomponentWillReceiveProps
с начальными реквизитами во время монтирования.
5. Используйте инструменты разработчика React.
Инструменты разработчика React позволяют вам проверять иерархию компонентов React, свойства и состояние компонентов. Это очень полезно во многих случаях, потому что React - это компоненты. Существует как расширение браузера (для Chrome и Firefox), так и отдельное приложение.
6. Используйте приложение Create React.
Facebook Create React App позволяет создавать приложения React без конфигурации сборки. Он очень прост в использовании и имеет отличный файл readme для Github. Вам нужно всего лишь иметь Node ›= 6, и он работает в macOS, Windows и Linux.
И еще одно: не забывайте следить за блогом OpsGenie Engineering, чтобы изучать такие интересные темы, как Serverless, AWS, React!