react js что это и зачем

Основы React: всё, что нужно знать для начала работы

Хотите узнать о том, что такое React, но вам всё никак не выпадает шанс изучить его? Или, может быть, вы уже пробовали освоить React, но не смогли толком понять? А может, вы разобрались с основами, но хотите привести в порядок знания? Эта статья написана специально для тех, кто положительно ответил хотя бы на один из этих вопросов. Сегодня мы создадим простой музыкальный проигрыватель, раскрывая основные концепции React по мере продвижения к цели.

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Разобравшись с этим материалом, вы освоите следующее:

Предварительная подготовка

Рассмотрим такую ситуацию: к вам за помощью обращается маленький стартап. Они создали приятную страницу, пользуясь которой пользователи могут загружать в их сервис музыку и проигрывать её. Им хочется, чтобы вы сделали самое сложное — вдохнули в эту страницу жизнь.

Для начала создайте новую директорию проекта и добавьте туда три файла. Вот они на GitHub, а вот их код.

Для успешного прохождения этого руководства вам понадобится свежая версия браузера Google Chrome, иначе не будут работать анимации. Выражаем благодарность Стивену Фабре за CSS для кнопки проигрывания и Джастину Виндлу за код визуализации (оригинал можно посмотреть здесь).

Откройте index.html в редакторе кода и в браузере. Пришло время познакомиться с React.

Что такое React?

React — это инструмент для создания пользовательских интерфейсов. Его главная задача — обеспечение вывода на экран того, что можно видеть на веб-страницах. React значительно облегчает создание интерфейсов благодаря разбиению каждой страницы на небольшие фрагменты. Мы называем эти фрагменты компонентами.

Вот пример разбивки страницы на компоненты:

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Каждый выделенный фрагмент страницы, показанной на рисунке, считается компонентом. Но что это значит для разработчика?

Что такое компонент React?

Компонент React — это, если по-простому, участок кода, который представляет часть веб-страницы. Каждый компонент — это JavaScript-функция, которая возвращает кусок кода, представляющего фрагмент страницы.

Для формирования страницы мы вызываем эти функции в определённом порядке, собираем вместе результаты вызовов и показываем их пользователю.

Напишем компонент внутри тега

Функции можно писать и так:

React использует язык программирования, называемый JSX, который похож на HTML, но работает внутри JavaScript, что отличает его от HTML.

Вы можете добавить сюда обычный HTML для того, чтобы он попал в пользовательский интерфейс:

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Можно и написать собственный компонент на JSX. Делается это так:

Это — стандартный подход — вызывать компоненты так, будто вы работаете с HTML.

Сборка компонентов

Компоненты React можно помещать в другие компоненты.

Вот что выведет вышеприведённый код:

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Именно так страницы собирают из фрагментов, написанных на React — вкладывая компоненты друг в друга.

Классы компонентов

До сих пор мы писали компоненты в виде функций. Их называют функциональными компонентами. Однако, компоненты можно писать и иначе, в виде классов JavaScript. Их называют классами компонентов.

В том случае, если вас интересуют компоненты без состояния, предпочтение следует отдать функциональным компонентам, их, в частности, легче читать. О состоянии компонентов мы поговорим ниже.

JavaScript в JSX

В JSX-код можно помещать переменные JavaScript. Выглядит это так:

Теперь текст «I am a string» окажется внутри тега

Кроме того, тут можно делать и вещи посложнее, вроде вызовов функций:

Вот как будет выглядеть страница после обработки вышеприведённого фрагмента кода:

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Подводные камни JSX

Для того, чтобы этого добиться, нужно воспользоваться свойством className :

Особенности создаваемого компонента

Метод constructor компонента React всегда должен вызвать super(props) прежде чем выполнять что угодно другое.
Итак, а что нам делать с этим «состоянием»? Зачем оно придумано?

Изменение компонента React на основе его состояния

Состояние — это инструмент, позволяющий обновлять пользовательский интерфейс, основываясь на событиях. Тут мы будем использовать состояние для изменения внешнего вида кнопки проигрывания музыки, основываясь на щелчке по ней. Кнопка может отображаться в одном из двух вариантов. Первый указывает на возможность запуска проигрывания, второй — на то, что музыка проигрывается, и этот процесс можно приостановить. Когда пользователь щёлкает по кнопке, меняется состояние, а затем обновляется пользовательский интерфейс.

В функции render ключевое слово this всегда ссылается на компонент, внутри которого она находится.

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Как компонент реагирует на события?

Пользователь может взаимодействовать с компонентом, щёлкая по кнопке проигрывания музыки. Мы хотим реагировать на эти события. Делается это посредством функции, которая занимается обработкой событий. Эти функции так и называются — обработчики событий.

Когда пользователь щёлкает по тексту, представленному тегом

Как должен работать компонент

Теперь, разобравшись с этим механизмом, займёмся обработкой щелчка по кнопке.

Обмен данными между компонентами

Когда состояние Container меняется, свойство PlayButton также меняется, и функция PlayButton вызывается снова. Это означает, что вид компонента на экране обновится.

Внутри PlayButton мы можем реагировать на изменения, так как PlayButton принимает свойства как аргумент:

Если мы поменяем состояние на this.state = < isMusicPlaying: true >; и перезагрузим страницу, на ней должна появиться кнопка паузы:

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

События как свойства

Свойства необязательно должны представлять собой какие-то данные. Они могут быть и функциями.

Неприятная особенность setState

Поэтому вот так поступать не следует:

Если вы изменяете состояние, основываясь на предыдущем состоянии, нужно делать это по-другому. А именно, следует передать setState функцию, а не объект. Эта функция принимает старое состояние как аргумент и возвращает объект, представляющий новое состояние.

Эта конструкция сложнее, но она необходима только в том случае, если вы используете старое состояние для формирования нового состояния. Если нет — можно просто передавать setState объект.

Что такое ссылки?

Пришло время включить музыку. Для начала добавим тег :

Источник

Зачем использовать React.js: как эта библиотека помогает разработчикам

За последние 20 лет интернет и технологии веб-разработки изменились до неузнаваемости. Некоторые проверенные временем решения получили второе рождение – например, язык программирования Python, а некоторые новые разработки, подобные Angular и React.js, стремительно набирают популярность. Востребованность React.js связана с новым трендом на обработку данных на стороне клиента.

Для чего нужен React.js

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Сейчас на рынке доступно множество различных платформ для веб-разработки, и? по сути, все они взаимозаменяемы. Чтобы в полной мере оценить удобство React.js, стоит вернуться на несколько лет назад, в 2011 год, когда все веб-технологии были основаны на скриптах и рендеринге. Это была эпоха HTML и CSS на стороне клиента, и PHP на стороне сервера.

Все, что надо было сделать разработчику сайта – создать каталог HTML-страниц для их последующей обработки с помощью PHP. Программисты концентрировались на серверной части, не уделяя должного внимания рендерингу на стороне пользователя. Не было никаких уникальных и динамических решений, и сайты выглядели соответствующе.

Затем кое-что изменилось: появились одностраничные приложения, JavaScript, а вскоре и React.js. С JavaScript стало возможным создание веб-приложений с обработкой данных на стороне клиента. Язык JavaScript предусматривает передачу данных и добавление к ним новых атрибутов. Разработчики начали создавать динамические приложения, не вдаваясь в тонкости PHP и серверной обработки. Осталась только одна сложная задача – манипуляции с DOM элементами.

Вклад React.js

Библиотека React.js, впервые представленная в 2013 году, используется для создания динамических веб и мобильных приложений. React.js предусматривает создание независимых повторно используемых компонентов, что значительно повышает производительность приложений. Эта библиотека использует концепцию виртуального DOM – имитационного способа представления структурного документа с помощью объектов.

Виртуальный DOM позволяет имитировать обработку на стороне сервера в браузере пользователя, без необходимости перезагрузки страницы для обновления информации. Это позволяет создавать по-настоящему динамические, интерактивные веб-приложения: любой элемент интерфейса можно обновить, не затрагивая и не перезагружая остальную часть страницы.

Основные особенности React.js

Используя библиотеку React.js, разработчик получает возможность сосредоточиться на пользовательском интерфейсе и компонентах приложения, уделяя меньше внимания коду. Эта библиотека помогает создавать приложения быстрее, декларативный стиль программирования значительно упрощает отладку компонентов и проекта в целом. Рассмотрим главные особенности React.js, которые делают эту библиотеку такой удобной.

Компонентный подход

Библиотека React.js включает в себя компоненты, ответственные за общение в социальных сетях, пользовательский интерфейс, управление состоянием приложения и другие сложные задачи. Модульный подход в React.js упрощает проектирование и предоставляет разработчикам наборы различных готовых компонентов.

Компактность

Библиотека React.js доступна в компактной редакции Minimal React. Этот небольшой пакет не требует времени и усилий для настройки. Он поставляется с удобной опцией разделения кода, которая помогает сократить время загрузки веб-сайта, так как эта функция предотвращает одновременный рендеринг всех компонентов.

Гибкость и развитая экосистема

React.js поставляется с множеством компонентов, интегрируется с другими платформами – все это позволяет разработчикам создавать сложные веб-приложения для любых целей. Этим и объясняется огромная популярность библиотеки React.js.

Обратная совместимость

Самое большое преимущество использования React.js заключается в том, что новые версии этой библиотеки полностью совместимы с предыдущими выпусками. Старые библиотеки не становятся бесполезными после выхода обновлений.

Как React.js может помочь разработчикам

У библиотеки React.js есть и другие полезные преимущества. Отметим некоторые из них.

React.js упрощает создание динамических приложений

Разработкой динамических веб-приложений занимаются многие компании. Пакет React.js найдет применение в любой из них, поскольку значительно сокращает сроки работы над проектами, улучшает функциональность веб-разработок и снижает объемы написания кода вручную.

Простота разработки и повышенная производительность приложений

Виртуальный DOM делает разработку проще, быстрее, понятнее, чем любая другая технология. Кроме того, использование этой технологии помогает избежать полной перезагрузки данных с сервера при внесении изменений в отдельный компонент.

Повторно используемые компоненты

Эта концепция в React.js предусматривает многократное использование одних и тех же компонентов в различных разделах приложения, что значительно сокращает сроки работы над проектом.

Однонаправленный поток данных

React.js помогает вложить дочерний компонент в родительский, позволяя потоку данных быть однонаправленным. Это облегчает разработчикам обнаружение ошибок и их устранение.

Простота изучения

Изучение React.js не представляет трудностей, поскольку эта среда разработки использует HTML, JavaScript и удобные дополнения. Встроенные инструменты и фреймворки помогают разработчику понять логику React.js.

Использование в разработке мобильных приложений

Пакет React Native применяют для создания мобильных приложений, однако эту библиотеку можно использовать и в разработке сайтов. React Native позволяет обходиться минимумом программного кода.

Архитектуры Flux и Redux

Архитектура Flux работает с однонаправленным потоком данных; Redux применяется, к примеру, в обработке исключений, регистрации событий и в управлении операциями в асинхронных запросах API.

Известные сайты, которые используют React.js

Прежде чем мы обсудим, в каких сферах можно применять React.js, давайте посмотрим, какие гиганты уже используют эту технологию. Ниже перечислены примеры таких сервисов.

Facebook

Социальная сеть Facebook использует React.js для веб-приложения и пакет React Native в мобильном варианте сервиса, доступного для платформ Android и iOS.

Instagram

Приложение Instagram применяет React.js для систем геолокации и рекомендаций, поискового движка, а также для обработки Google-карт.

Netflix

Вместо интерфейса DOM (объектной модели документа) сервис использует React.js в приложениях для устройств с невысокой производительностью. Компания отдает предпочтение React.js по причине модульности, скорости загрузки и компактности.

WhatsApp

React.js – одна из библиотек, используемых мессенджером, наряду с Velocity.js и UnderScore.js. В Whatsapp на основе React.js реализован интерфейс пользователя.

Dropbox

React.js используется облачным сервисом Dropbox как для веб-версии, так и для мобильного приложения.

Где лучше всего использовать React.js

На основе библиотеки React.js можно создавать самые разнообразные типы мобильных приложений и сайтов. Вот несколько интересных идей.

Социальные сети

React.js подходит для создания социальных платформ: Twitter, Facebook, Instagram используют многие возможности этой библиотеки. React.js упрощает разработку функций для размещения текстовых и мультимедийных материалов. Создание новостных лент и трансляций, реализацию комментариев, лайков и системы аутентификации пользователей.

Электронная коммерция

Гигант онлайн-ретейла Amazon использует React.js. Данная библиотека позволяет разрабатывать надежные и многофункциональные системы управления продажами в онлайн-магазине, подходящие для площадок с огромным трафиком. Возможности React.js применяются в популярном мобильном приложении UberEats для заказа и доставки еды.

Развлечения

Среди развлекательных платформ, использующих React.js, можно упомянуть сервисы Netflix, YouTube, TikTok и Spotify. Функциональность этой библиотеки позволяет создавать интерактивные развлекательные веб-сервисы и мобильные приложения с опциями социальной сети – комментариями, лайками, подписками, рейтингами.

Мессенджеры

Функции библиотеки React.js, помимо Whatsapp, используются в мессенджерах Viber и Facebook Messenger. На основе библиотеки React Native можно создать систему технической поддержки пользователей, работающую в реальном времени – на сайте компании или в мобильном приложении.

Планировщики задач

Библиотека React.js отлично подходит для разработки приложений, связанных с управлением проектами и личным временем, хранением заметок, распределением задач, совместной работой. На основе React.js среди прочих работают приложения Todoist, Notion, Things.

Подведем итоги

Мы рассмотрели некоторые из возможных сфер применения библиотеки React.js. Это очень гибкая, универсальная технология, и какая бы идея у вас ни возникла, квалифицированный разработчик сможет ее реализовать. Создание веб-сервиса и приложения на основе React.js будет способствовать росту компании, поскольку даст возможность бизнесу использовать все новейшие тренды.

Пожалуйста, оставьте свои мнения по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, лайки, дизлайки, отклики, подписки!

Источник

React.js: понятное руководство для начинающих

Автор статьи, перевод которой мы публикуем, считает, что, к несчастью, в большинстве из существующих руководств по React не уделяется должного внимания ценным практическим приёмам разработки. Такие руководства не всегда дают тому, кто по ним занимается, понимание того, что такое «правильный подход» к работе с React.

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

В этом руководстве, которое рассчитано на начинающих разработчиков, имеющих знания в области HTML, JavaScript и CSS, будут рассмотрены основы React и самые распространённые ошибки, с которыми может столкнуться программист, пользующийся данной библиотекой.

Почему веб-разработчики выбирают React?

Прежде чем мы приступим к делу, скажем пару слов о том, почему React можно считать наилучшей альтернативой среди средств для разработки веб-интерфейсов. Существует множество UI-фреймворков. Почему стоит выбрать именно React? Для того чтобы ответить на этот вопрос — сравним два самых популярных инструмента для разработки интерфейсов — React и Angular. Надо отметить, что в это сравнение можно было бы включить и набирающий популярность фреймворк Vue.js, но мы ограничимся React и Angular.

▍Декларативный подход к описанию интерфейсов

React-разработка заключается в описании того, что нужно вывести на страницу (а не в составлении инструкций для браузера, посвящённых тому, как это делать). Это, кроме прочего, означает значительное сокращение объёмов шаблонного кода.

В составе Angular, с другой стороны, есть средства командной строки, которые генерируют шаблонный код компонентов. Не кажется ли это немного не тем, чего можно ждать от современных инструментов разработки интерфейсов? Фактически, речь идёт о том, что в Angular так много шаблонного кода, что для того, чтобы его генерировать, даже создано специальное средство.

В React, приступая к разработке, просто начинают писать код. Тут нет шаблонного кода компонентов, который нужно как-то генерировать. Конечно, перед разработкой нужна некоторая подготовка, но, когда дело доходит до компонентов, их можно описывать в виде чистых функций.

▍Чёткий синтаксис

▍Правильная кривая обучения

Кривая обучения — это важный фактор, который нужно учитывать при выборе UI-фреймворка. В этой связи надо отметить, что в React имеется меньше абстракций, чем в Angular. Если вы знаете JavaScript, то, вероятно, вы сможете научиться писать React-приложения буквально за день. Конечно, для того, чтобы научиться делать это правильно, потребуется некоторое время, но приступить к работе можно очень и очень быстро.

Если же проанализировать Angular, то окажется, что если вы решите освоить этот фреймворк, вам придётся изучить новый язык (Angular использует TypeScript), а также научиться использовать средства командной строки Angular и привыкнуть к работе с директивами.

▍Особенности механизма привязки данных

В Angular имеется система двусторонней привязки данных. Это, например, выражается в том, что изменения в форме элемента приводят к автоматическому обновлению состояния приложения. Это усложняет отладку и является большим минусом данного фреймворка. При таком подходе, если что-то идёт не так, программист не может совершенно точно знать о том, что именно стало причиной изменения состояния приложения.

В React, с другой стороны, используется односторонняя привязка данных. Это — большой плюс данной библиотеки, так как выражается это в том, что программист всегда точно знает о том, что привело к изменению состояния приложения. Подобный подход к привязке данных значительно упрощает отладку приложений.

▍Функциональный подход к разработке

Я полагаю, что одной из сильнейших сторон React является тот факт, что эта библиотека не принуждает разработчика к использованию классов. В Angular же все компоненты должны быть реализованы в виде классов. Это приводит к чрезмерному усложнению кода, не давая никаких преимуществ.

В React все компоненты пользовательского интерфейса могут быть выражены в виде наборов чистых функций. Использование чистых функций для формирования UI можно сравнить с глотком чистого воздуха.

Теперь, когда мы рассмотрели причины популярности React, которые, вполне возможно, склонят вас в сторону именно этой библиотеки при выборе инструментов для разработки пользовательских интерфейсов, перейдём к практике.

Практика разработки React-приложений

▍Node.js

Node.js — это серверная платформа, поддерживающая выполнение JavaScript-кода, возможности которой пригодятся нам для React-разработки. Если эта платформа ещё у вас не установлена — сейчас самое время это исправить.

▍Подготовка проекта

Здесь мы, для создания основы React-приложения, будем использовать пакет create-react-app от Facebook. Вероятно, это самый популярный подход к настройке рабочего окружения, которое позволяет приступить к разработке. Благодаря create-react-app программист получает в своё распоряжение множество нужных инструментов, что избавляет его от необходимости самостоятельно их подбирать.

Затем, для создания шаблона приложения, выполните такую команду:

На этом предварительная подготовка закончена. Для запуска приложения выполните следующие команды:

Тут мы переходим в папку проекта и запускаем сервер разработки, который позволяет открыть новое React-приложение, перейдя в браузере по адресу http://localhost:3000/.

▍Структура проекта

Разберёмся теперь с тем, как устроено React-приложение. Для этого откройте только что созданный проект с помощью вашей IDE (я рекомендую Visual Studio Code).

Файл index.html

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Здесь нас особенно интересует строка

. Именно тут будет находиться наше React-приложение. Весь этот элемент будет заменён на код приложения, а всё остальное останется неизменным.

Файл index.js

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Вот строка кода, которая ответственна за вывод того, что мы называем «React-приложением», на страницу:

Файл App.js

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Обратите внимание на то, что атрибут className — это эквивалент атрибута class в HTML. Он используется для назначения элементам CSS-классов в целях их стилизации. Ключевое слово class в JavaScript является зарезервированным, его нельзя использовать в качестве имени атрибута.

Повторим то, что мы только что выяснили о компонентах:

▍Рекомендация №1: не нужно везде использовать классы компонентов

Компоненты в React можно создавать, применяя два подхода. Первый заключается в использовании классов компонентов (Class Component), второй — в использовании функциональных компонентов (Functional Component). Как вы, возможно, заметили, в вышеприведённом примере используются классы. К сожалению, большинство руководств по React для начинающих предлагают использовать именно их.

Что плохого в описании компонентов с использованием механизма классов? Дело в том, что такие компоненты тяжело тестировать и они имеют свойство чрезмерно разрастаться. Эти компоненты подвержены проблеме некачественного разделения ответственности, смешиванию логики и визуального представления (а это усложняет отладку и тестирование приложений). В целом, использование классов компонентов ведёт к тому, что программист, фигурально выражаясь, «стреляет себе в ногу». Поэтому, особенно если речь идёт о начинающих программистах, я порекомендовал бы им совсем не пользоваться классами компонентов.

Видите, что мы тут сделали? А именно, мы убрали класс и заменили метод render конструкцией вида function App() <. >. Если же тут воспользоваться синтаксисом стрелочных функций ES6, то наш код будет выглядеть ещё лучше:

Мы превратили класс в функцию, возвращающую разметку, которую надо вывести на страницу.

Поразмыслите над этим. В функции, которая возвращает разметку, нет шаблонного кода. Это — практически чистая разметка. Разве это не прекрасно?

Код функциональных компонентов гораздо легче читать, работая с ними, приходится гораздо меньше отвлекаться на стандартные конструкции.

Тут надо отметить, что хотя только что мы сказали о том, что функциональные компоненты предпочтительнее классов компонентов, в этом материале мы будем пользоваться, в основном, классами, так как код классов компонентов оказывается понятнее для новичков, он полагается на меньшее количество абстракций, с его помощью легче демонстрировать ключевые концепции React. Но когда вы в достаточной мере освоитесь в деле разработки React-приложений, настоятельно рекомендуется учитывать, при разработке реальных проектов, то, что было сказано выше. Для того чтобы лучше разобраться с функциональными компонентами — взгляните на этот материал.

▍Знакомство со свойствами

Свойства (props) — это одна из центральных концепций React. Что такое «свойства»? Для того чтобы это понять, вспомните о параметрах, которые передают функциям. В сущности, свойства — это и есть параметры, которые передаются компонентам. Рассмотрим следующий код:

Код можно упростить, воспользовавшись возможностями ES6 по деструктурированию объектов:

Что если для решения такой же задачи мы, вместо функциональных компонентов, использовали бы компоненты, основанные на классах? В таком случае код компонента Greetings выглядел бы так:

▍Принцип единственной ответственности

Принцип единственной ответственности (Single Responsibility Principle, SRP) — это один из важнейших принципов программирования, которого следует придерживаться. Он говорит нам о том, что модуль должен решать только одну задачу и должен делать это качественно. Если разрабатывать проект, не следуя только одному этому принципу, код такого проекта может превратиться в кошмарную конструкцию, которую невозможно поддерживать.

Как можно нарушить принцип единственной ответственности? Чаще всего это происходит тогда, когда несвязанные друг с другом механизмы размещают в одних и тех же файлах. В этом материале мы часто будем обращаться к данному принципу.

Новички обычно размещают в одном файле множество компонентов. Например, у нас код компонентов Greetings и App находится в одном файле. На практике так поступать не следует, так как это нарушает SRP.

Даже очень маленькие компоненты (вроде нашего компонента Greetings ) нужно размещать в отдельных файлах.

Поместим код компонента Greetings в отдельный файл:

Затем воспользуемся этим компонентом в компоненте App :

▍Знакомство с состоянием приложения

Состояние (state) — это ещё одна из центральных концепций React. Именно здесь хранятся данные приложения — то есть то, что может меняться. Нужно сохранить что-то, введённое в поле формы? Используйте состояние. Нужно сохранить очки, набранные игроком в браузерной игре? Для этого тоже надо использовать состояние приложения.

Создадим простую форму, с помощью которой пользователь может ввести своё имя. Обратите внимание на то, что здесь я намеренно использую для описания компонента класс, так как это облегчает демонстрацию рассматриваемой концепции. О том, как преобразовать компонент, созданный с использованием класса, в функциональный компонент, можете почитать здесь.

Как использовать значение, введённое в поле? В React не полагается обращаться к элементам DOM напрямую. Решить эту задачу нам помогут обработчики событий и состояние приложения.

В данном случае event.target.value — это то, что пользователь ввёл в поле формы, а именно — его имя.

Обратите внимание на то, что мы не объявили onFirstNameChange в виде метода. Очень важно, чтобы подобные вещи объявлялись бы в виде свойств класса, содержащих стрелочные функции, а не в виде методов. Если объявить подобную функцию в виде метода, тогда this будет привязано к элементу формы, который вызывает этот метод, а не к классу, как мы могли бы ожидать. Эта мелочь часто сбивает с толку новичков. Это — одна из причин рекомендации по использованию функциональных компонентов, а не классов компонентов.

▍Проверка данных, введённых в форму

Реализуем простую систему проверки данных, введённых в форму, используя регулярные выражения. Давайте решим, что имя должно состоять как минимум из трёх символов и может содержать лишь буквы.

Состояние приложения

Разрабатывая систему проверки ввода, мы, для начала, добавили в состояние новое свойство: firstNameError :

Функция проверки данных

Если проверка не удалась — мы возвращаем из функции сообщение об ошибке. Если имя прошло проверку — возвращаем пустую строку, которая указывает на то, что ошибок при проверке имени не найдено. Тут мы, ради краткости кода, пользуемся тернарным оператором JavaScript.

Обработчик события onBlur

Метод render

Рассмотрим метод компонента render() :

Тут мы снова пользуемся деструктурирующим присваиванием для извлечения данных из состояния.

▍Стилизация

Если вы воспроизводили у себя то, о чём мы тут говорили, то вы могли заметить, что наша форма выглядит не слишком симпатично. Давайте это исправим, воспользовавшись встроенными стилями:

Признаю, что я не дизайнер, но то, что у меня получилось, выглядит сейчас гораздо лучше, чем прежде. Вот какой стала теперь форма, в которой выводится сообщение об ошибке.

react js что это и зачем. Смотреть фото react js что это и зачем. Смотреть картинку react js что это и зачем. Картинка про react js что это и зачем. Фото react js что это и зачем

Стилизованная форма с сообщением об ошибке

▍Рекомендация №2: избегайте использования стилей внутри компонентов

После того, как этот файл создан, подключим его в компоненте SimpleComponent :

Этот код выглядит куда чище, чем его предыдущий вариант. Поэтому примите себе за правило размещать стили в отдельных файлах.

▍Добавление полей формы

Сделаем нашу форму немного интереснее, добавив в неё поле для ввода фамилии пользователя:

В обновлённом компоненте не так уж и много изменений — мы просто скопировали код, используемый для описания firstName и создали копии обработчиков событий.

Неужто это я написал слово «скопировали»? Копирование кода — это то, чего стоит всеми силами избегать.

▍Рекомендация №3: разделяйте код на небольшие фрагменты

Монолитный код, не разделённый на части, это проблема, которая, как и многие другие, нарушает принцип единственной ответственности. Хорошо написанный код должен читаться как поэма, а я готов поспорить, что код метода render нашего компонента выглядит куда хуже. Займёмся решением этой проблемы.

Я, создавая этот компонент, просто извлёк код одного из полей ввода из метода render и оформил его в виде функционального компонента. То, что в разных экземплярах подобного компонента может меняться, передано ему в виде свойств.

Вот как можно использовать этот новый компонент в компоненте SimpleForm :

Такой код читать легче, чем прежний. Мы можем пойти ещё дальше, создав отдельные компоненты TextField для имени и фамилии. Вот код компонента FirstNameField :

Похожим образом устроен и компонент LastNameField :
Вот каким теперь будет код формы:

Теперь код компонента выглядит гораздо лучше.

▍О классах компонентов

Перечислим причины, по которым не рекомендуется использовать компоненты, основанные на классах, отдавая предпочтение функциональным компонентам:

Итоги

Хотя этот материал и получился достаточно длинным, о создании React-приложений можно говорить ещё очень долго. В частности, о том, как правильно организовывать код, и о том, какие приёмы разработки рекомендуется и не рекомендуется использовать. Несмотря на то, что это руководство не является всеобъемлющим, мы полагаем, что если благодаря ему состоялось ваше первое знакомство с React, то вы, пользуясь тем, что сегодня узнали, сможете эффективно осваивать эту UI-библиотеку.

→ Исходный код примеров, рассмотренных в этом материале, можно найти здесь

Уважаемые читатели! Если сегодня, в ходе прочтения этой статьи, вы написали свои первые строки React-кода, просим поделиться впечатлениями.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *