Для чего используют react js
ReactJS для глупых людей
Пытаясь разобраться с библиотекой от Facebook ReactJS и продвигаемой той же компанией архитектурой «Flux», наткнулся на просторах интернета на две занимательные статьи: «ReactJS For Stupid People» и «Flux For Stupid People». Решил поделиться с хабравчанами переводом первой (а чуть позже и второй) статьи. Итак, поехали.
ReactJS для глупых людей
TL;DR В течении долгого времени я пытался понять, что такое React и как он вписывается в структуру приложения. Это статья, которой мне в свое время не хватало.
Что такое React?
Чем отличается React от Angular, Ember, Backbone и других? Как управлять данными? Как взаимодействовать с сервером? Что, черт возьми, такое JSX? Что такое «component»?
Остановитесь прямо сейчас.
React — это ТОЛЬКО УРОВЕНЬ ПРЕДСТАВЛЕНИЯ.
React часто упоминают в одном ряду с другими javascript фреймворками, но споры «React vs Angular» не имеют смысла, потому что это не сопоставимые вещи. Angular — это полноценный фреймворк (включающий и уровень представления). React — нет. Вот почему React вызывает столько непонимания в развивающемся мире полноценных фреймворков — это только представление.
React дает вам язык шаблонов и некоторые callback-функции для отрисовки HTML. Весь результат работы React — это HTML. Ваши связки HTML/JavaScript, называемые компонентами, занимаются тем, что хранят свое внутреннее состояние в памяти (например: какая закладка выбрана), но в итоге вам просто выплевывается HTML.
Разумеется, вы не можете построить полно функционирующее динамическое приложение только с React. Почему, мы рассмотрим позже.
Плюсы
После работы с React, я увидел три очень важных преимущества.
1. Вы всегда можете сказать, как ваш компонент будет отрисован, глядя на исходный код.
Это может быть важным преимуществом, хотя это ничем не отличается от шаблонов Angular. Давайте воспользуемся примером из реальной жизни.
Скажем, вам нужно изменить заголовок вашего сайта на имя пользователя после логина. Если вы не используете какой-либо MVC фреймворк, вы можете сделать что-то вроде:
По опыту могу сказать, что этот код испортит жизнь вам и вашим коллегам. Как производить отладку? Кто изменяет заголовок? Кто имеет доступ к заголовку? Кто определяет видимость? Манипуляция с DOM так же плоха, как оператор GOTO в логике вашей программы.
Вот как вы могли бы сделать это с React:
Мы можем тут же сказать, как компонент будет отрисован. Если вы знаете состояние — вы знаете результат отрисовки. Вам не нужно прослеживать ход выполнения программы. Когда разрабатывается сложное приложение, особенно в команде, это очень важно.
2. Связывание JavaScript и HTML в JSX делает компоненты простыми для понимания.
Странное сочетание HTML/JavaScript может вас смутить. Нас учили не вставлять JavaScript в DOM (например: обработчики OnClick), еще в то время, когда мы были «крошечными» разработчиками (ор: since we were wee developers). Но вы можете мне верить, работать с JSX компонентами это на самом деле замечательно.
Обычно вы разделяете представления (HTML) и функциональность (JavsScript). Это приводит к монолитному JavaScript файлу, содержащему всю функциональность для одной страницы, и вы должны следить за сложным потоком JS->HTML->JS->неприятная ситуация.
Связывание функциональности напрямую с разметкой и упаковка этого в портативный, автономный «компонент», сделает вас счастливее, а ваш код в целом лучше. Ваш Javasacript «хорошо знаком» с вашим HTML, так что смешивать их имеет смысл.
3. Вы можете рендерить React на сервере.
Если вы разрабатывает публичный сайт или приложение, и вы рендерите все на клиенте, то вы выбрали неправильный путь. Клиентский рендеринг — это причина, почему SoundCloud работает медленно, и почему Stack Overflow (используя только серверный рендеринг) работает так быстро. Вы можете рендерить React на сервере, и вы должны этого делать.
Angular и другие поощряют использование PhantomJS для рендеринга страницы и предоставления ее поисковым движкам (основываясь на user-агенте) или использование платных сервисов. ТЬФУ!
Минусы
Не забывайте, что React — это только представление.
В реальном мире React сам по себе бесполезен. Хуже того, как мы видим, это приводит к тому, что каждый изобретает свой велосипед.
2. Плохая и непонятная документация.
Повторюсь, эта статья для глупых людей. Посмотрите на первую часть боковой панели документации:
Здесь три отдельных, конкурирующие туториала для начинающих. Это удивляет. Боковая панель ниже, словно из моих ночных кошмаров, с разделами, которые точно не должны быть здесь, такие как «More About Refs» и «PureRenderMixin» (прим. переводчика: плагин для React).
3. React достаточно большой, учитывая то, как мало вы от него получаете, включая плохую кроссбраузерную поддержку.
35 KB gzipped
Это без библиотеки в reacat-with-addons, которая будет вам нужна для разработки реального приложения!
Это без библиотеки ES5-shim, необходимой для поддержки IE8!
Это без какой-либо другой библиотеки!
По размеру React сравним с Angular, хотя Angular — это полноценный фреймворк. React, откровенно говоря, жирный, для такой маленькой функциональности. Будем надеяться, что в будущем это поправят.
Хватит говорить «FLUX»
Flux скорее паттерн, чем фреймворк
Тьфу. Хуже всего то, что React не переосмысляет последние 40 лет знаний в области UI-архитектуры и не придумывает какой-то новой концепции управления данными.
Концепция Flux проста: ваше представление вызывает событие (например: пользователь вводит имя в текстовое поле), событие изменяет модель, затем модель вызывает событие, представление реагирует на событие модели и перерисовывается с новыми данными. Вот и все.
Однонаправленный поток данных и шаблон проектирования «наблюдатель» гарантирует, что ваши хранилища/модели, всегда находится в актуальном состоянии. Это полезно.
Плохой стороной Flux является то, что каждый заново изобретает его. Так и нет договоренности о библиотеки событий, слое модели, AJAX слое и остального, есть много разных реализаций «Flux» и все они конкурируют между собой.
Должен ли я использовать React?
Развернутый ответ: к сожалению, да, для многих вещей.
Я надеюсь, эта статься поможет таким же глупым людям, как и я, лучше понять React. Если этот пост сделал вашу жизнь проще, можете подписаться на меня в Твитере.
Зачем использовать React.js: как эта библиотека помогает разработчикам
За последние 20 лет интернет и технологии веб-разработки изменились до неузнаваемости. Некоторые проверенные временем решения получили второе рождение – например, язык программирования Python, а некоторые новые разработки, подобные Angular и 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 использует React.js для веб-приложения и пакет React Native в мобильном варианте сервиса, доступного для платформ Android и iOS.
Приложение Instagram применяет React.js для систем геолокации и рекомендаций, поискового движка, а также для обработки Google-карт.
Netflix
Вместо интерфейса DOM (объектной модели документа) сервис использует React.js в приложениях для устройств с невысокой производительностью. Компания отдает предпочтение React.js по причине модульности, скорости загрузки и компактности.
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: всё, что нужно знать для начала работы
Хотите узнать о том, что такое React, но вам всё никак не выпадает шанс изучить его? Или, может быть, вы уже пробовали освоить React, но не смогли толком понять? А может, вы разобрались с основами, но хотите привести в порядок знания? Эта статья написана специально для тех, кто положительно ответил хотя бы на один из этих вопросов. Сегодня мы создадим простой музыкальный проигрыватель, раскрывая основные концепции React по мере продвижения к цели.
Разобравшись с этим материалом, вы освоите следующее:
Предварительная подготовка
Рассмотрим такую ситуацию: к вам за помощью обращается маленький стартап. Они создали приятную страницу, пользуясь которой пользователи могут загружать в их сервис музыку и проигрывать её. Им хочется, чтобы вы сделали самое сложное — вдохнули в эту страницу жизнь.
Для начала создайте новую директорию проекта и добавьте туда три файла. Вот они на GitHub, а вот их код.
Для успешного прохождения этого руководства вам понадобится свежая версия браузера Google Chrome, иначе не будут работать анимации. Выражаем благодарность Стивену Фабре за CSS для кнопки проигрывания и Джастину Виндлу за код визуализации (оригинал можно посмотреть здесь).
Откройте index.html в редакторе кода и в браузере. Пришло время познакомиться с React.
Что такое React?
React — это инструмент для создания пользовательских интерфейсов. Его главная задача — обеспечение вывода на экран того, что можно видеть на веб-страницах. React значительно облегчает создание интерфейсов благодаря разбиению каждой страницы на небольшие фрагменты. Мы называем эти фрагменты компонентами.
Вот пример разбивки страницы на компоненты:
Каждый выделенный фрагмент страницы, показанной на рисунке, считается компонентом. Но что это значит для разработчика?
Что такое компонент React?
Компонент React — это, если по-простому, участок кода, который представляет часть веб-страницы. Каждый компонент — это JavaScript-функция, которая возвращает кусок кода, представляющего фрагмент страницы.
Для формирования страницы мы вызываем эти функции в определённом порядке, собираем вместе результаты вызовов и показываем их пользователю.
Напишем компонент внутри тега
Функции можно писать и так:
React использует язык программирования, называемый JSX, который похож на HTML, но работает внутри JavaScript, что отличает его от HTML.
Вы можете добавить сюда обычный HTML для того, чтобы он попал в пользовательский интерфейс:
Можно и написать собственный компонент на JSX. Делается это так:
Это — стандартный подход — вызывать компоненты так, будто вы работаете с HTML.
Сборка компонентов
Компоненты React можно помещать в другие компоненты.
Вот что выведет вышеприведённый код:
Именно так страницы собирают из фрагментов, написанных на React — вкладывая компоненты друг в друга.
Классы компонентов
До сих пор мы писали компоненты в виде функций. Их называют функциональными компонентами. Однако, компоненты можно писать и иначе, в виде классов JavaScript. Их называют классами компонентов.
В том случае, если вас интересуют компоненты без состояния, предпочтение следует отдать функциональным компонентам, их, в частности, легче читать. О состоянии компонентов мы поговорим ниже.
JavaScript в JSX
В JSX-код можно помещать переменные JavaScript. Выглядит это так:
Теперь текст «I am a string» окажется внутри тега
Кроме того, тут можно делать и вещи посложнее, вроде вызовов функций:
Вот как будет выглядеть страница после обработки вышеприведённого фрагмента кода:
Подводные камни JSX
Для того, чтобы этого добиться, нужно воспользоваться свойством className :
Особенности создаваемого компонента
Метод constructor компонента React всегда должен вызвать super(props) прежде чем выполнять что угодно другое.
Итак, а что нам делать с этим «состоянием»? Зачем оно придумано?
Изменение компонента React на основе его состояния
Состояние — это инструмент, позволяющий обновлять пользовательский интерфейс, основываясь на событиях. Тут мы будем использовать состояние для изменения внешнего вида кнопки проигрывания музыки, основываясь на щелчке по ней. Кнопка может отображаться в одном из двух вариантов. Первый указывает на возможность запуска проигрывания, второй — на то, что музыка проигрывается, и этот процесс можно приостановить. Когда пользователь щёлкает по кнопке, меняется состояние, а затем обновляется пользовательский интерфейс.
В функции render ключевое слово this всегда ссылается на компонент, внутри которого она находится.
Как компонент реагирует на события?
Пользователь может взаимодействовать с компонентом, щёлкая по кнопке проигрывания музыки. Мы хотим реагировать на эти события. Делается это посредством функции, которая занимается обработкой событий. Эти функции так и называются — обработчики событий.
Когда пользователь щёлкает по тексту, представленному тегом
Как должен работать компонент
Теперь, разобравшись с этим механизмом, займёмся обработкой щелчка по кнопке.
Обмен данными между компонентами
Когда состояние Container меняется, свойство PlayButton также меняется, и функция PlayButton вызывается снова. Это означает, что вид компонента на экране обновится.
Внутри PlayButton мы можем реагировать на изменения, так как PlayButton принимает свойства как аргумент:
Если мы поменяем состояние на this.state = < isMusicPlaying: true >; и перезагрузим страницу, на ней должна появиться кнопка паузы:
События как свойства
Свойства необязательно должны представлять собой какие-то данные. Они могут быть и функциями.
Неприятная особенность setState
Поэтому вот так поступать не следует:
Если вы изменяете состояние, основываясь на предыдущем состоянии, нужно делать это по-другому. А именно, следует передать setState функцию, а не объект. Эта функция принимает старое состояние как аргумент и возвращает объект, представляющий новое состояние.
Эта конструкция сложнее, но она необходима только в том случае, если вы используете старое состояние для формирования нового состояния. Если нет — можно просто передавать setState объект.
Что такое ссылки?
Пришло время включить музыку. Для начала добавим тег :
React.js для новичков в программировании: что это, как устроен и зачем нужен
Если стажёр или совсем зелёный джун попросят вас объяснить, что такое React.js, — просто покажите им эту статью.
OlyaSnow для Skillbox Media
В интернете полно руководств по React.js с названиями типа for dummies, for idiots — вроде бы для чайников. Но они по большей части негуманны и довольно сложны — человеку без знания JavaScript пользы не будет, только сильнее запутается и почувствует себя тем самым dummy. Поэтому мы решили максимально просто объяснить, что такое React.js, для чего он нужен, как попробовать и что понадобится для полноценной работы.
Что это ещё за новый тикток такой?
React.js — это JavaScript-библиотека от Facebook для удобной разработки интерфейсов, то есть внешней части сайтов и приложений, с которой взаимодействует пользователь.
Главная фишка React.js — компоненты и состояния.
Компонент — это кусочек кода, который отвечает за внешний вид одного из элементов сайта или приложения. Причём такие кусочки-компоненты могут быть вложенными.
Состояние — это вся информация об элементе, в том числе о его отображении. Например, состояние объекта «термометр» может описываться свойствами current_temperature, min и max.
Фанат Free Software Foundation, использует Linux и недолюбливает Windows. Пишет истории про кодинг и программы на Python. Влюблён в Lisp, но пока что не умеет на нём программировать.
Переводим на понятный язык: что такое компоненты и состояния
Пока звучит немного абстрактно и сложно, но на деле всё гораздо проще. Потренируемся на Цукерберге: в конце концов, это его детище — ему и отвечать.
На скриншоте три крупных компонента — пост в ленте Facebook, блок краткой информации и блок с выводом фотографий. В каждый из них входят более мелкие компоненты. Например, внутри поста есть текст, изображение, аватарка, имя автора, лайки, комментарии, различные информационные элементы. Внутри блока с фотографиями — отдельные фото, а внутри блока с краткой информацией — собственно, та самая краткая информация.
У каждого из этих компонентов есть состояния. Например, блок краткой информации будет по-разному выглядеть на мобильной и десктопной версии, у сердечка меняется цифра с лайками или цвет (если вы лайкнули или не лайкнули запись), а пост может обрезать текст, показывать содержимое полностью, меняться в зависимости от содержания. Ведь содержание поста — это тоже его состояние. Именно в этом проявляется гибкость и сила React.js: вы пишете компонент один раз, а потом просто передаёте ему разные состояния.
Посмотрите, как в зависимости от состояния меняется размер аватарки:
Уже получилось три состояния, но это не предел — ведь внешний вид аватарки различается в мобильной и десктопной версии, в приложении для Android, iOS и так далее. Отметим, что аватарка практически везде будет вложенной — в составе более крупных компонентов React.js, таких как пост, шапка, боковая панель или меню.
В React.js есть собственные средства для управления состояниями, но на практике в средних и крупных проектах чаще используют Redux — сторонний менеджер состояний. Он удобнее и лучше масштабируется.
Зачем нужен React.js, если есть HTML, JavaScript и CSS
Никаких огородов. React.js — это всего лишь способ в удобном виде представить код JavaScript и HTML, сделать его повторяемым и наглядным. Компоненты React.js пишут на особом языке — JSX, который выглядит как смесь JavaScript и HTML. Вот пример кода на этом языке:
JSX-код — то, что кажется HTML-тегом
, на самом деле элемент JSX
Код JSX довольно наглядный, и, кстати, то, что похоже на HTML, — вовсе не HTML 🙂 Звучит галлюциногенно, но это просто синтаксис JSX.
Браузеру понимать JSX не нужно — код React.js транслируется в JavaScript, с которым знаком любой уважающий себя браузер. Для этого написанное на React.js приложение прогоняют, например, через Babel — специальную программу-транспайлер, которая переводит разные представления (то есть языки вроде JSX) в JavaScript-код.
JSX-код JavaScript-код после Babel
На первый взгляд, механика странная. Кажется, это как если бы Достоевский придумал свой собственный язык, писал на нём книги, а потом их переводили бы на русский и только после этого издавали. И это была бы хорошая аналогия — но только если бы книги Достоевского переводились на русский автоматически, а писать на новом языке было бы в несколько раз быстрее.
У React.js есть три мощных преимущества: