React (веб-фреймворк)

редактировать
Библиотека JavaScript для создания пользовательских интерфейсов
React
React- icon.svg
Автор (ы) Джордан Уолк
Разработчик (и) Facebook и сообщество
Первоначальный выпуск29 мая 2013 г.; 7 лет назад (29.05.2013)
Стабильный выпуск 17.0.1 / 22 октября 2020 г.; 13 дней назад (2020-10-22)
Репозиторий React Repository
Написано наJavaScript
Платформа Веб-платформа
Тип Библиотека JavaScript
Лицензия Лицензия MIT
Веб-сайтreactjs.org

React (также известный как React.js или ReactJS ) - это с открытым исходным кодом, интерфейс, библиотека JavaScript для создания пользовательских интерфейсов или компонентов пользовательского интерфейса. Он поддерживается Facebook и сообществом отдельных разработчиков и компаний. React можно использовать как основу при разработке одностраничных или мобильных приложений. Однако React занимается только отображением данных в DOM, поэтому создание приложений React обычно требует использования дополнительных библиотек для управления состоянием и маршрутизации. Redux и React Router являются соответствующими примерами таких библиотек.

Содержание

  • 1 Базовое использование
  • 2 Основные особенности
    • 2.1 Компоненты
    • 2.2 Функциональные компоненты
    • 2.3 Компоненты на основе классов
    • 2.4 Виртуальная модель DOM
    • 2.5 Методы жизненного цикла
    • 2.6 JSX
    • 2.7 Архитектура за пределами HTML
    • 2.8 Реагирование на хуки
      • 2.8.1 Правила хуков
      • 2.8.2 Пользовательские хуки
  • 3 Общие идиомы
    • 3.1 Использование архитектуры Flux
  • 4 Будущие разработки
  • 5 История
  • 6 Лицензирование
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки

Базовое использование

Ниже приведен элементарный пример использования React. в HTML с JSX и JavaScript.

1 2 3

Функция Greeter- это компонент React, который принимает свойство welcome. Переменная Appявляется экземпляром компонента Greeter, где для свойства welcomeустановлено значение 'Hello World!'. Затем метод ReactDOM.renderотображает наш компонент Greeter внутри элемента DOM с идентификатором myReactApp.

При отображении в веб-браузере результатом будет

React (веб-фреймворк) - React (web framework)

Примечательные особенности

Компоненты

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

ReactDOM.render (, document.getElementById ('myReactApp'));

Два основных способа объявления компонентов в React - через функциональные компоненты и компоненты на основе классов.

Функциональные компоненты

Функциональные компоненты объявляются с функцией, которая затем возвращает некоторый JSX.

const Greeting = (props) =>Здравствуйте, {props.name}! ;

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

Компоненты на основе классов объявляются с использованием классов ES6.

класс ParentComponent расширяет React.Component {state = {color: 'green'}; render () {возврат (); }}

Виртуальный DOM

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

Методы жизненного цикла

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

  • shouldComponentUpdateпозволяет разработчику предотвратить ненужный повторный рендеринг компонента, возвращая false, если рендеринг не требуется.
  • componentDidMountвызывается после того, как компонент «смонтирован» (компонент был создается в пользовательском интерфейсе, часто связывая его с узлом DOM ). Обычно это используется для запуска загрузки данных из удаленного источника через API..
  • componentWillUnmountвызывается непосредственно перед тем, как компонент будет отключен или «размонтирован». Это обычно используется для очистки ресурсоемких зависимостей компонента, которые не будут просто удалены при размонтировании компонента (например, удаление любых экземпляров setInterval (), связанных с компонентом, или " eventListener ", установленный в" документе "из-за наличия компонента)
  • renderявляется наиболее важным методом жизненного цикла и единственным необходимым в любом компоненте. Обычно он вызывается каждый раз при обновлении состояния компонента, что должно отражаться в пользовательском интерфейсе.

JSX

JSX, или JavaScript XML, является расширением языка JavaScript. синтаксис. Внешне похожий на HTML, JSX предоставляет способ структурирования рендеринга компонентов с использованием синтаксиса, знакомого многим разработчикам. Компоненты React обычно пишутся с использованием JSX, хотя это и не обязательно (компоненты также могут быть написаны на чистом JavaScript). JSX похож на другой синтаксис расширения, созданный Facebook для PHP, который называется XHP.

. Пример кода JSX:

1 класс App расширяет React.Component {2 render () {3 return (4 5 

Заголовок

6

Содержимое

7

Нижний колонтитул

8 9); 10} 11}
Вложенные элементы

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

.

Атрибуты

JSX предоставляет ряд атрибутов элементов, предназначенных для отражения атрибутов, предоставляемых HTML. Пользовательские атрибуты также могут быть переданы компоненту. Все атрибуты будут получены компонентом как реквизиты.

Выражения JavaScript

Выражения JavaScript (но не инструкции ) можно использовать внутри JSX с фигурными скобками {}:

React (веб-фреймворк) - React (web framework)

В приведенном выше примере render

React (веб-фреймворк) - React (web framework)

Условные операторы

Операторы If – else нельзя использовать внутри JSX, но вместо них можно использовать условные выражения. В приведенном ниже примере будет отображаться {i === 1? 'true': 'false'}как строка 'true', потому что iравно 1.

1 класс App расширяет React.Component {2 render () {3 const i = 1; 4 return (5 6 

React (веб-фреймворк) - React (web framework)

7 8); 9} 10}

Приведенное выше будет отображать:

React (веб-фреймворк) - React (web framework)

Функции и JSX могут использоваться в условных выражениях:

1 класс App расширяет React.Component {2 render () {3 const section = [1, 2, 3]; 4 return (5 6 {section.length>0 section.map (n =>(7 / * 'ключ' используется в реакции для отслеживания элементов списка и их изменений * / 8 / * Каждый 'ключ 'должно быть уникальным * / 9 Раздел {n} 10))} 11 12); 13} 14}

Приведенное выше будет отображать:

Раздел 1 Раздел 2 Раздел 3

Код, написанный на JSX, требует преобразования с помощью такого инструмента, как Babel до того, как его смогут понять веб-браузеры. Эта обработка обычно выполняется во время процесса сборки программного обеспечения до того, как приложение будет развернуто.

Архитектура за пределами HTML

Базовая архитектура React применяется помимо рендеринга HTML в браузере. Например, у Facebook есть динамические диаграммы, которые отображаются в теги , а Netflix и PayPal используют универсальную загрузку для отображения идентичного HTML как на сервере, так и на клиенте.

Перехватчики реакции

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

React предоставляет несколько встроенных хуков, например useState, useContext, useReducerи useEffect, чтобы назвать некоторые из них. Все они указаны в Справочнике по API хуков. Наиболее часто используемые useStateи useEffectпредназначены для управления состояниями и побочными эффектами соответственно в компонентах React.

Правила хуков

Существуют также правила хуков, которым необходимо следовать, прежде чем их можно будет использовать.

  1. Хуки должны вызываться только на верхнем уровне (не внутри циклов или операторов if).
  2. Хуки должны вызываться только из компонентов функции React, а не из обычных функций или компонентов класса

Пользовательские хуки

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

Общие идиомы

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

Использование архитектуры Flux

Для поддержки концепции React об однонаправленном потоке данных (который может контрастировать с двунаправленным потоком AngularJS ) архитектура Flux представляет собой альтернативу к популярной архитектуре модель-представление-контроллер. В Flux есть действия, которые отправляются через центральный диспетчер в хранилище, а изменения в хранилище распространяются обратно в представление. При использовании с React это распространение осуществляется через свойства компонента.

Flux можно рассматривать как вариант шаблона наблюдателя.

Компонент React в архитектуре Flux не должен напрямую изменять какие-либо переданные ему реквизиты, но ему должны передаваться функции обратного вызова, которые создают действия, которые отправлено диспетчером на доработку магазина. Действие - это объект, в обязанности которого входит описание того, что произошло: например, действие, описывающее одного пользователя, «следующего» за другим, может содержать идентификатор пользователя, идентификатор целевого пользователя и тип USER_FOLLOWED_ANOTHER_USER. Хранилища, которые можно рассматривать как модели, могут изменяться в ответ на действия, полученные от диспетчера.

Этот шаблон иногда выражается как «свойства текут вниз, действия текут вверх». С момента его создания было создано множество реализаций Flux, возможно, самая известная из них - Redux, которая имеет единое хранилище, часто называемое единым источником истины.

Будущее развитие

Статус проекта можно отслеживать через дискуссионный форум основной группы. Однако основные изменения в React связаны с проблемами репозитория Future of React и запросами на вытягивание. Это позволяет сообществу React предоставлять отзывы о новых потенциальных функциях, экспериментальных API и улучшениях синтаксиса JavaScript.

История

React был создан Джорданом Уолком, инженером-программистом в Facebook, который выпустил ранний прототип React под названием «FaxJS». На него повлиял XHP, библиотека компонентов HTML для PHP. Впервые он был развернут в новостной ленте Facebook в 2011 году, а затем в Instagram в 2012 году. В мае 2013 года его исходный код был открыт в JSConf US.

React Native, который позволяет создавать собственные Android, iOS и UWP с помощью React, было объявлено на конференции React Conf в Facebook в феврале 2015 года и открыто в марте 2015 года.

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

26 сентября 2017 г. был выпущен общедоступный React 16.0.

16 февраля 2019 г., React 16.8 был выпущен для широкой публики. Релиз представил React Hooks.

10 августа 2020 года команда React объявила о первом выпуске-кандидате для React v17.0, известном как первый крупный выпуск без серьезных изменений в API React для разработчиков.

Версии
ВерсияДата выпускаИзменения
0.3.029 мая 2013 г.Первоначальный общедоступный выпуск
0.4.020 июля 2013 г.Поддержка узлов комментариев {/ * * /}, улучшенные API рендеринга на стороне сервера, удален React.autoBind, поддержка ключа prop, Доработки форм, Исправленные ошибки.
0.5.020 октября 2013 г.Улучшение использования памяти, Поддержка событий Selection и Composition, Поддержка getInitialState и getDefaultProps в миксинах, добавлены React.version и React.isValidClass, улучшено совместимость с Windows.
0.8.020 декабря 2013 г.Добавлена ​​поддержка строк и столбцов, отложенного и асинхронного, цикла для
0.9.020 февраля 2014 г.Добавлена ​​поддержка crossOrigin, download и hrefLang, mediaGroup и отключено, песочница, бесшовные и srcDoc, атрибуты области, добавлены любые, arrayOf, component, oneOfType, renderable, shape в React.PropTypes, Добавлена ​​поддержка событий onMouseOver и onMouseOut, Добавлена ​​поддержка onLoad и onError для элементов .
0.10.021 марта 2014 г.Добавлена ​​поддержка атрибутов srcSet и textAnchor, добавлена ​​функция обновления для неизменяемых данных, Убедитесь, что все элементы void не вставляют закрывающий тег.
0.11.017 июля 2014 г.Улучшенная поддержка SVG, нормализованное событие e.view, команда Update $ apply, добавлена ​​поддержка пространств имен, добавлен новый API-интерфейс transformWithDetails, включая предварительно созданные пакеты в dist /, MyComponent () теперь возвращает дескриптор, а не экземпляр.
0.12.021 ноября 2014 г.Добавлены новые функции Оператор распространения ({...}), представленный для исключения this.transferPropsTo, добавлена ​​поддержка acceptCharset, classID, атрибутов HTML манифеста, React.addons.batchedUpdates добавлен в API, @jsx React.DOM больше не требуется, Исправлены проблемы с переходами CSS.
0.13.010 марта 2015Устаревшие шаблоны, которые предупреждали в версии 0.12, больше не работают, порядок разрешения ссылок изменен, удалены свойства this._pendingState и this._rootNodeID, поддержка классов ES6, Добавлен API React.findDOMNode (компонент), Поддержка итераторов и последовательностей immutable-js, Добавлены новые функции React.addons.createFragment, React.addons.classSet является устаревшим.
0.14.129 октября 2015 г.Добавлена ​​поддержка srcLang, атрибутов default, kind и color, гарантирован доступ к устаревшим.props на узлах DOM, исправлен scryRenderedDOMComponentsWithClass, добавлена ​​реакция dom.js.
15.0.007 апреля 2016 г.Первоначальный рендеринг теперь использует document.createElement вместо генерации HTML, больше никаких лишних s, улучшенная поддержка SVG, ReactPerf.getLastMeasurements () непрозрачен, Новые устаревшие версии представлены с предупреждением, Исправлено несколько небольших утечек памяти, React DOM теперь поддерживает атрибуты HTML cite и profile, а также свойства CSS cssFloat, gridRow и gridColumn.
15.1.020 мая 2016 г.Исправить ошибку пакетной обработки, обеспечить использование последней версии назначения объекта, исправить регрессию, удалить использование утилиты слияния, переименовать некоторые модули.
15.2.001 июля 2016 г.Включить информацию о стеке компонентов, остановить проверку свойств во время монтирования, добавить React.PropTypes.symbol, добавить обработку onLoad в и обработку ошибок onError в элемент , добавить isRunning () API, исправить снижение производительности.
15.3.030 июля 2016 г.Добавление React.PureComponent, Устранение проблемы с рендерингом вложенного сервера, Добавление xmlns, xmlnsXlink для поддержки атрибутов SVG и referrerPolicy для атрибутов HTML, обновление React Perf Дополнение, Исправлена ​​проблема с исх.
15.3.119 августа 2016 г.Повышение производительности сборок для разработки, Очистка внутренних хуков, Обновление fbjs, Улучшение времени запуска React, Устранение утечки памяти при рендеринге сервера, Исправление React Test Renderer, замените инвариант trackedTouchCount на console.error.
15.4.016 ноября 2016 г.Пакет React и сборка браузера больше не включают React DOM, улучшенную производительность разработки, исправленные периодические сбои тестов, обновление batchedUpdates API, React Perf и ReactTestRenderer.Создайте().
15.4.123 ноября 2016 г.Назначение переменных реструктуризации, фиксированная обработка событий, фиксированная совместимость сборки браузера со средами AMD.
15.4.206 января 2017 г.Исправлены проблемы сборки, добавлены недостающие зависимости пакетов, улучшены сообщения об ошибках.
15.5.007 апреля 2017 г.Добавлен response-dom / test-utils, Удалены peerDependencies, Исправлена ​​проблема с компилятором Closure, Добавлено предупреждение об устаревании для React.createClass и React. PropTypes, исправлена ​​ошибка Chrome.
15.5.411 апреля 2017 г.Исправить совместимость с Enzyme, выставив batchedUpdates на мелком рендерере, Обновить версию prop-types, Исправить пакет response-addons-create-fragment, чтобы включить рыхлая трансформация.
15.6.013 июня 2017 г.Добавить поддержку переменных CSS в атрибуте стиля и свойствах стиля сетки, Исправить поддержку AMD для надстроек в зависимости от реакции, Удалить ненужную зависимость, Добавить отказ предупреждение для хелперов фабрики React.createClass и React.DOM.
16.0.026 сентября 2017 г.Улучшена обработка ошибок с введением «границ ошибок», React DOM позволяет передавать нестандартные атрибуты, Незначительные изменения в поведении setState, удаление реакции- with-addons.js build, Добавить React.createClass как create-react-class, React.PropTypes как prop-types, React.DOM как react-dom-factory, изменения в поведении методов планирования и жизненного цикла.
16.1.09 ноября 2017 г.Прекращение выпуска выпусков Bower, исправление случайной дополнительной глобальной переменной в сборках UMD, исправление срабатывания onMouseEnter и onMouseLeave, исправление