React - это только «V» часть MVC, и поэтому он не зависит от того, как вы проектируете свой пользовательский интерфейс.
Если не уделять должного внимания, достаточно большое приложение для реагирования может быстро уступить место беспорядку компонентов с отслеживанием состояния, каждый из которых имеет собственное мнение, что быстро нарушит способ реагирования на действия.
При создании с React необходимо учитывать несколько ключевых моментов:
- Компоненты без сохранения состояния
- Состав
- Централизованное управление состоянием с Redux
Компоненты без сохранения состояния
Ваши компоненты должны быть максимально апатичными; например, ваши компоненты не должны запускать собственное состояние, вместо этого они должны зависеть от переданных в props.
Это делает ваши компоненты предсказуемыми и легко тестируемыми, поскольку они ведут себя как чистые функции. Принимайте данные и выводите JSX.
Композиция
Это подход, состоящий из двух частей:
- Разбиение сложного компонента на более мелкие управляемые части
- Составление сложного пользовательского интерфейса из общих пользовательских компонентов
Разбиение сложного компонента на более мелкие управляемые части
Скажем, у вас есть такой компонент:
С высоты птичьего полета это не совсем понятно. Слишком много div с именами классов.
Кроме того, если нам нужно отобразить другой пузырь чата, возможно, для системных сообщений с похожим нижним колонтитулом, мы не сможем этого сделать. Это все тесно связано.
И в довершение всего, вот как мы используем вышеуказанный компонент:
<ChatBubble
sentBy={message.sentBy}
messageContent={message.content}
time={message.time}/>
При любых обновлениях заголовка пузыря чата мы должны возиться со всем файлом компонента.
Не обновляя использование, мы можем просто разбить ChatBubble
вот так:
Header
& Footer
может быть в собственном файле и импортирован сюда. Но беглый взгляд на ChatBubble
, и мы видим, что теперь это изменение делает его более читаемым.
Мы знаем, что в нем есть верхний и нижний колонтитулы. Все идет нормально.
Составление сложного пользовательского интерфейса из общих пользовательских компонентов
Теперь предположим, что у нас есть два типа сообщений: одно, которое пользователи отправляют друг другу в виде текста. Другие, которые включают галерею изображений. Все остальные детали, такие как верхний и нижний колонтитулы, остаются прежними.
В нашей текущей реализации это значительно затруднительно.
Мы могли бы написать сложную логику, чтобы понять, messageContent
включает ли изображения и разделить их, и применить все виды темной магии, чтобы заставить это работать.
Или, может быть, мы могли бы сделать что-то вроде этого:
Проверьте раздел тела. Мы сделали {props.children}
. Это означает, что сюда передается любой дочерний элемент компонента.
А на месте звонка сделайте так:
Теперь мы можем отображать сообщения чата по своему усмотрению.
Завтра, когда появится третий вид сообщения чата, возможно, от бота, в то время как верхний и нижний колонтитулы останутся прежними, мы просто обновим способ отображения содержимого тела из компонента, который использует ChatBubble
.
Код использован повторно :)
Централизованное управление состоянием с Redux
Redux делает состояние нашего приложения предсказуемым, сохраняя его в центральном хранилище / хранилище.
Единственный способ обновить состояние - выпустить actions
, которые имеют формат:
{ type: String, payload: Any }
Пример:
{ type: 'SET_USER_DETAILS', payload: { user: { _id: 1, name: 'John Doe' } } }
Эти действия передаются чистым функциям, называемым reducers
, которые используют действие и возвращают новую версию состояния. Затем это сохраняется в хранилище, и все функции, подписывающиеся на эту часть дерева состояний, уведомляются.
Пример UsersReducer.js
Пользовательский интерфейс может использовать эти данные следующим образом:
Каждый раз, когда значение хранилища изменяется, компонент User
будет получать обновления.
Узнайте о редуксе из этого умного курса Дэна Абрамова.
Спасибо за прочтение.
Нажмите * хлоп *, если вы думаете, что это того стоило :)
Найдите меня в linkedin или вернитесь ко мне в комментариях.
Нанять лучших ReactJs Frontend разработчиков на Prolanceer.com
Prolanceer.com - это экономичная, прошедшая предварительную проверку рыночная платформа для найма независимых профессионалов в области программного обеспечения на фрилансе или по контракту