React (веб-фреймворк) - React (web framework)
Оригинальный автор (ы) | Джордан Уолк |
---|---|
Разработчики) | Facebook и сообщество |
изначальный выпуск | 29 мая, 2013[1] |
Стабильный выпуск | 17.0.0[2] / 20 октября 2020 |
Репозиторий | |
Написано в | JavaScript |
Платформа | Веб-платформа |
Тип | Библиотека JavaScript |
Лицензия | Лицензия MIT |
Интернет сайт | reactjs |
Реагировать (также известный как React.js или же ReactJS) является Открытый исходный код, внешний интерфейс, Библиотека JavaScript[3] для строительства пользовательские интерфейсы или компоненты пользовательского интерфейса. Он поддерживается Facebook и сообщество отдельных разработчиков и компаний.[4][5][6]React можно использовать как основу при разработке одна страница или мобильные приложения. Однако React занимается только отображением данных в ДОМ, поэтому создание приложений React обычно требует использования дополнительных библиотек для государственное управление и маршрутизация.[7][8] Redux[9] и React Router[10] являются соответствующими примерами таких библиотек.
Основное использование
Ниже приведен элементарный пример использования React в HTML с JSX и JavaScript.
1<div я бы="myReactApp"></div>23<сценарий тип="текст / бабель">4 функция Приветствующий(реквизит) {5 возвращаться <h1>{реквизит.приветствие}</ h1>6 }7 вар Приложение = <Приветствующий приветствие="Привет, мир!" />;8 ReactDOM.оказывать(Приложение, документ.getElementById('myReactApp'));9</сценарий>
В Приветствующий
функция - это компонент React, который принимает свойство приветствие
. Переменная Приложение
является примером Приветствующий
компонент, где приветствие
свойство установлено на 'Привет, мир!'
. В ReactDOM.render
затем отображает наш компонент Greeter внутри ДОМ элемент с идентификатором myReactApp
.
При отображении в веб-браузере результат будет
<div я бы="myReactApp"> <h1>Привет, мир!</h1></div>
Примечательные особенности
Составные части
Код React состоит из сущностей, называемых компонентами. Компоненты могут отображаться для определенного элемента в ДОМ с помощью библиотеки React DOM. При рендеринге компонента можно передавать значения, известные как «свойства».[11]:
ReactDOM.оказывать(<Приветствующий приветствие="Привет, мир!" />, документ.getElementById('myReactApp'));
Два основных способа объявления компонентов в React - через функциональные компоненты и компоненты на основе классов.
Функциональные компоненты
Функциональные компоненты объявляются с функцией, которая затем возвращает некоторый JSX.
const Приветствие = (реквизит) => <div>Привет, {реквизит.имя}!</ div>;
Компоненты на основе классов
Компоненты на основе классов объявляются с использованием ES6 классы.
учебный класс Родительский компонент расширяет Реагировать.Компонент { государственный = { цвет: 'зеленый' }; оказывать() { возвращаться ( <ChildComponent цвет={это.государственный.цвет} /> ); }}
Виртуальный DOM
Еще одна примечательная особенность - использование виртуального Объектная модель документа, или виртуальный DOM. React создает в памяти кэш структуры данных, вычисляет полученные различия, а затем эффективно обновляет отображаемую в браузере DOM.[12]. Этот процесс называется примирение. Это позволяет программисту писать код, как будто вся страница отображается при каждом изменении, в то время как библиотеки React визуализируют только те подкомпоненты, которые фактически изменяются. Этот выборочный рендеринг обеспечивает значительное повышение производительности. Это избавляет от необходимости пересчитывать стиль CSS, макет страницы и визуализацию всей страницы.
Методы жизненного цикла
В методах жизненного цикла используется форма зацепление что позволяет выполнять код в заданных точках в течение срока службы компонента.
shouldComponentUpdate
позволяет разработчику предотвратить ненужный повторный рендеринг компонента, возвращая false, если рендеринг не требуется.componentDidMount
вызывается после того, как компонент "смонтирован" (компонент был создан в пользовательском интерфейсе, часто путем связывания его с ДОМ узел). Обычно это используется для запуска загрузки данных из удаленного источника через API.componentWillUnmount
вызывается непосредственно перед разборкой или «размонтированием» компонента. Обычно это используется для очистки ресурсоемких зависимостей от компонента, которые не будут просто удалены при размонтировании компонента (например, при удалении любыхsetInterval ()
экземпляры, связанные с компонентом, или "eventListener «установить на« документ »из-за наличия компонента)оказывать
это самый важный метод жизненного цикла и единственный необходимый для любого компонента. Обычно он вызывается каждый раз при обновлении состояния компонента, что должно отражаться в пользовательском интерфейсе.
JSX
JSX или JavaScript XML, является расширением синтаксиса языка JavaScript.[13] По внешнему виду похожий на HTML, JSX предоставляет способ структурирования рендеринга компонентов с использованием синтаксиса, знакомого многим разработчикам. Компоненты React обычно пишутся с использованием JSX, хотя это и не обязательно (компоненты также могут быть написаны на чистом JavaScript). JSX похож на синтаксис другого расширения, созданного Facebook для PHP называется XHP.
Пример JSX-кода:
1учебный класс Приложение расширяет Реагировать.Компонент { 2 оказывать() { 3 возвращаться ( 4 <div> 5 <п>Заголовок</ p> 6 <п>Содержание</ p> 7 <п>Нижний колонтитул</ p> 8 </ div> 9 );10 }11}
- Вложенные элементы
Несколько элементов на одном уровне нужно заключить в один элемент React, например <div>
элемент, показанный выше, фрагмент, обозначенный <Fragment>
или в сокращенной форме <>
, или возвращается как массив.[14][15]
- Атрибуты
JSX предоставляет ряд атрибутов элементов, предназначенных для отражения атрибутов, предоставляемых HTML. Пользовательские атрибуты также могут быть переданы компоненту.[16] Все атрибуты будут получены компонентом как реквизиты.
- Выражения JavaScript
JavaScript выражения (но нет заявления ) можно использовать внутри JSX с фигурными скобками {}
:
<h1>{10+1}</ h1>
В приведенном выше примере будет отображаться
<h1>11</h1>
- Условные утверждения
Операторы if – else нельзя использовать внутри JSX, но вместо этого можно использовать условные выражения. Пример ниже будет отображать {i === 1? 'истина': 'ложь'}
как строка 'истинный'
потому что я
равно 1.
1учебный класс Приложение расширяет Реагировать.Компонент { 2 оказывать() { 3 const я = 1; 4 возвращаться ( 5 <div> 6 <h1>{ я === 1 ? 'истинный' : 'ложный' }</ h1> 7 </ div> 8 ); 9 }10}
Вышеуказанное будет отображать:
<div> <h1>истинный</h1></div>
Функции и JSX можно использовать в условных выражениях:
1учебный класс Приложение расширяет Реагировать.Компонент { 2 оказывать() { 3 const разделы = [1, 2, 3]; 4 возвращаться ( 5 <div> 6 {разделы.длина > 0 && разделы.карта(п => ( 7 / * 'ключ' используется в реакции для отслеживания элементов списка и их изменений * / 8 / * Каждый «ключ» должен быть уникальным * / 9 <div ключ={"раздел-" + п}>Раздел {п}</ div>10 ))}11 </ div>12 );13 }14}
Вышеуказанное будет отображать:
<div> <div>Секция 1</div> <div>Раздел 2</div> <div>Раздел 3</div></div>
Код, написанный на JSX, требует преобразования с помощью такого инструмента, как Вавилон прежде, чем его смогут понять веб-браузеры.[17] Эта обработка обычно выполняется во время сборка программного обеспечения процесс до подачи заявки развернутый.
Архитектура за пределами HTML
Базовая архитектура React применяется помимо рендеринга HTML в браузере. Например, в Facebook есть динамические диаграммы, отображающие <canvas>
теги[18] и Netflix и PayPal используйте универсальную загрузку, чтобы отображать идентичный HTML как на сервере, так и на клиенте.[19][20]
Реагировать на крючки
Хуки - это функции, которые позволяют разработчикам «подключаться» к функциям состояния и жизненного цикла React из функциональных компонентов.[21] Хуки не работают внутри классов - они позволяют использовать React без классов.[22]
React предоставляет несколько встроенных хуков, например useState
,[23] useContext
, useReducer
и useEffect
[24]. Остальные описаны в Справочнике по Hooks API.[25] useState
и useEffect
, которые наиболее часто используются, предназначены для контроля состояния и побочных эффектов соответственно.
Правила крючков
Есть правила крючков[26] которые описывают характерный шаблон кода, на который полагаются ловушки.
- Хуки должны вызываться только на верхнем уровне (не внутри циклов или операторов if).
- Хуки следует вызывать только из функциональных компонентов React, а не из обычных функций или компонентов класса.
Хотя эти правила не могут быть применены во время выполнения, инструменты анализа кода, такие как линтеры, могут быть настроены для обнаружения многих ошибок во время разработки. Правила применяются как к использованию хуков, так и к реализации кастомных хуков.[27], который может вызывать другие хуки.
Общие идиомы
React не пытается предоставить полную «библиотеку приложений». Он разработан специально для создания пользовательских интерфейсов.[3] и поэтому не включает многие инструменты, которые некоторые разработчики могут счесть необходимыми для создания приложения. Это позволяет выбрать, какие библиотеки предпочитает разработчик для выполнения таких задач, как выполнение доступа к сети или локального хранения данных. По мере взросления библиотеки появились общие шаблоны использования.
Использование архитектуры Flux
Для поддержки концепции однонаправленного потока данных в React (что может быть противопоставлено AngularJS двунаправленного потока), архитектура Flux представляет собой альтернативу популярным модель-представление-контроллер архитектура. Особенности флюса действия которые отправляются через центральный диспетчер к хранить, и изменения в хранилище распространяются обратно в представление.[28] При использовании с React это распространение осуществляется через свойства компонента.
Флюс можно рассматривать как вариант образец наблюдателя.[29]
Компонент React в архитектуре Flux не должен напрямую изменять какие-либо переданные ему реквизиты, но ему следует передавать функции обратного вызова, которые создают действия которые отправляются диспетчером для модификации магазина. Действие - это объект, в обязанности которого входит описание того, что произошло: например, действие, описывающее одного пользователя, "следующего" за другим, может содержать идентификатор пользователя, идентификатор целевого пользователя и тип USER_FOLLOWED_ANOTHER_USER
.[30] Хранилища, которые можно рассматривать как модели, могут изменяться в ответ на действия, полученные от диспетчера.
Этот паттерн иногда выражается как «свойства текут вниз, действия текут вверх». Многие реализации Flux были созданы с момента его создания, возможно, самая известная из них Redux, который представляет собой единый магазин, часто называемый единственный источник истины.[31]
Дальнейшее развитие
Статус проекта можно отслеживать через дискуссионный форум основной команды.[32] Однако основные изменения в React связаны с проблемами репозитория Future of React и запросы на вытягивание.[33][34] Это позволяет сообществу React предоставлять отзывы о новых потенциальных функциях, экспериментальных API и улучшениях синтаксиса JavaScript.
История
React был создан Джорданом Уолком, инженером-программистом в Facebook, который выпустил ранний прототип React под названием «FaxJS».[35][36] На него повлияли XHP, HTML библиотека компонентов для PHP. Впервые он был размещен на Facebook Новостная лента в 2011 году и позже Instagram в 2012.[37] Его исходный код был открыт в JSConf US в мае 2013 года.[36]
React Native, что позволяет Android, iOS, и UWP о разработке с помощью React было объявлено на конференции Facebook React Conf в феврале 2015 года, а исходный код был открыт в марте 2015 года.
18 апреля 2017 года Facebook объявил React Fiber, новый основной алгоритм библиотеки React для сборки пользовательские интерфейсы.[38] React Fiber должен был стать основой для любых будущих улучшений и развития функций библиотеки React.[39][нуждается в обновлении ]
26 сентября 2017 года React 16.0 был выпущен для широкой публики.[40]
16 февраля 2019 года React 16.8 был выпущен для широкой публики.[41] Релиз представил React Hooks.[42]
10 августа 2020 года команда React объявила о первом выпуске-кандидате для React v17.0, известном как первый крупный выпуск без серьезных изменений в API React для разработчиков.[43]
Версия | Дата выхода | Изменения | |
---|---|---|---|
0.3.0 | 29 мая 2013 | Первоначальный публичный выпуск | |
0.4.0 | 20 июля 2013 г. | Поддержка узлов комментариев {/ * * /} , улучшенные API рендеринга на стороне сервера, удаленный React.autoBind, поддержка ключевого свойства, улучшения форм, исправленные ошибки. | |
0.5.0 | 20 октября 2013 г. | Улучшение использования памяти, поддержка событий Selection и Composition, поддержка getInitialState и getDefaultProps в миксинах, добавлены React.version и React.isValidClass, улучшена совместимость с Windows. | |
0.8.0 | 20 декабря 2013 г. | Добавлена поддержка строк и столбцов, отложенного и асинхронного, цикла для | |
0.9.0 | 20 февраля 2014 г. | Добавлена поддержка crossOrigin, download и hrefLang, mediaGroup и muted, sandbox, seamless и srcDoc, scope, добавлены атрибуты any, arrayOf, component, oneOfType, renderable, shape в React.PropTypes, добавлена поддержка onMouseOver и onMouseOut event, добавлена поддержка для onLoad и onError для элементов . | |
0.10.0 | 21 марта 2014 г. | Добавлена поддержка атрибутов srcSet и textAnchor, добавлена функция обновления для неизменяемых данных, Убедитесь, что все элементы void не вставляют закрывающий тег. | |
0.11.0 | 17 июля 2014 г. | Улучшенная поддержка SVG, нормализованное событие e.view, команда Update $ apply, добавлена поддержка пространств имен, добавлен новый API transformWithDetails, включены предварительно созданные пакеты в dist /, MyComponent () теперь возвращает дескриптор, а не экземпляр. | |
0.12.0 | 21 ноября 2014 г. | Добавлены новые функции Оператор распространения ({...}), представленный для исключения this.transferPropsTo, Добавлена поддержка acceptCharset, classID, атрибутов HTML манифеста, React.addons.batchedUpdates добавлен в API, @jsx React.DOM больше не требуется, Исправлены проблемы с переходами CSS. | |
0.13.0 | 10 марта 2015 г. | Устаревшие шаблоны, о которых говорилось в версии 0.12, больше не работают, порядок разрешения ссылок изменен, удалены свойства this._pendingState и this._rootNodeID, поддержка классов ES6, добавлен API React.findDOMNode (компонент), поддержка итераторов и последовательностей неизменяемых js, добавлены новые функции React.addons.createFragment, React.addons.classSet устарел. | |
0.14.1 | 29 октября 2015 г. | Добавлена поддержка srcLang, атрибутов по умолчанию, атрибутов вида и атрибута цвета, Обеспечен доступ к устаревшим .props на узлах DOM, Исправлен scryRenderedDOMComponentsWithClass, Добавлен response-dom.js. | |
15.0.0 | 7 апреля 2016 г. | Первоначальный рендеринг теперь использует document.createElement вместо генерации HTML, Больше никаких лишних s, Улучшенная поддержка SVG, ReactPerf.getLastMeasurements () непрозрачен, Новые устаревшие версии представлены с предупреждением, Исправлено несколько небольших утечек памяти, React DOM теперь поддерживает цитировать и профилировать атрибуты HTML и свойства CSS cssFloat, gridRow и gridColumn. | |
15.1.0 | 20 мая 2016 | Исправьте ошибку пакетной обработки, Убедитесь, что используется последнее назначение объекта, Исправьте регрессию, Удалите использование утилиты слияния, Переименуйте некоторые модули. | |
15.2.0 | 1 июля 2016 г. | Включите информацию о стеке компонентов, прекратите проверку свойств во время монтирования, добавьте React.PropTypes.symbol, добавьте обработку onLoad в и обработку onError в элемент | |
15.3.0 | 30 июля 2016 г. | Добавить React.PureComponent, Исправить проблему с рендерингом вложенного сервера, Добавить xmlns, xmlnsXlink для поддержки атрибутов SVG и referrerPolicy в атрибуты HTML, обновить надстройку React Perf, Исправить проблему с ref. | |
15.3.1 | 19 августа 2016 г. | Повысьте производительность сборок разработки, Очистите внутренние перехватчики, Обновите fbjs, Улучшите время запуска React, Исправьте утечку памяти при рендеринге сервера, исправьте React Test Renderer, Измените инвариант trackedTouchCount на console.error. | |
15.4.0 | 16 ноября 2016 г. | Пакет React и сборка браузера больше не включают React DOM, улучшенную производительность разработки, исправленные случайные сбои тестов, обновление batchedUpdates API, React Perf и ReactTestRenderer.create (). | |
15.4.1 | 23 ноября 2016 г. | Назначение переменных реструктуризации, Фиксированная обработка событий, Фиксированная совместимость сборки браузера со средами AMD. | |
15.4.2 | 06 января 2017 | Исправлены проблемы сборки, добавлены недостающие зависимости пакетов, улучшены сообщения об ошибках. | |
15.5.0 | 7 апреля 2017 г. | Добавлен response-dom / test-utils, Удалены peerDependencies, Исправлена проблема с компилятором Closure, Добавлено предупреждение об устаревании для React.createClass и React.PropTypes, Исправлена ошибка Chrome. | |
15.5.4 | 11 апреля 2017 г. | Исправьте совместимость с Enzyme, выставив batchedUpdates на мелком рендерере, обновите версию prop-types, исправьте пакет response-addons-create-fragment, чтобы включить преобразование свободно-envify. | |
15.6.0 | 13 июня 2017 г. | Добавить поддержку переменных CSS в атрибут стиля и свойства стиля сетки, Исправить поддержку AMD для надстроек в зависимости от реакции, Удалить ненужную зависимость, Добавить предупреждение об устаревании для помощников фабрики React.createClass и React.DOM. | |
16.0.0 | 26 сентября 2017 г. | Улучшенная обработка ошибок с введением «границ ошибок», React DOM позволяет передавать нестандартные атрибуты, Незначительные изменения в поведении setState, удаление сборки response-with-addons.js, добавление React.createClass как create-response-class, React.PropTypes как prop-types, React.DOM как react-dom-factory, изменения в поведении методов планирования и жизненного цикла. | |
16.1.0 | 9 ноября 2017 г. | Прекращение выпуска выпусков Bower, исправление случайной дополнительной глобальной переменной в сборках UMD, исправление срабатывания onMouseEnter и onMouseLeave, исправление заполнителя | |
16.3.0 | 29 марта 2018 г. | Добавить новый официально поддерживаемый API контекста, Добавить новый пакет, предотвратить бесконечный цикл при попытке визуализации порталов с SSR, исправить проблему с this.state, исправить проблему IE / Edge. | |
16.3.1 | 3 апреля 2018 г. | Префикс частного API, Исправить ошибки регрессии производительности и обработки ошибок в режиме разработки, Добавить одноранговую зависимость, Исправить ложное срабатывание предупреждения в IE11 при использовании фрагмента. | |
16.3.2 | 16 апреля 2018 г. | Устранение сбоя IE, исправление меток в измерениях пользовательского времени, добавление сборки UMD, повышение производительности unstable_observedBits API с вложением. | |
16.4.0 | 24 мая 2018 | Добавить поддержку спецификации событий указателя, добавить возможность указывать propTypes, исправить контекст чтения, исправить поддержку getDerivedStateFromProps (), исправить сбой testInstance.parent, добавить компонент React.unstable_Profiler для измерения производительности, изменить имена внутренних событий. | |
16.5.0 | 5 сентября 2018 г. | Добавить поддержку React DevTools Profiler, изящно обрабатывать ошибки в более крайних случаях, добавить response-dom / profiling, добавить событие onAuxClick для браузеров, добавить поля motionX и motionY к событиям мыши, добавить поля tangentialPressure и twist в событие указателя. | |
16.6.0 | 23 октября 2018 г. | Добавьте поддержку contextType, Поддержите уровни приоритета, продолжения и обернутые обратные вызовы, Улучшите механизм отката, Исправьте серое наложение в iOS Safari, Добавьте React.lazy () для компонентов разделения кода. | |
16.7.0 | 20 декабря 2018 г. | Исправьте производительность React.lazy для лениво загружаемых компонентов, Очистите поля при отключении, чтобы избежать утечек памяти, Исправить ошибку с SSR, Исправить снижение производительности. | |
16.8.0 | 6 февраля 2019 г. | Добавить хуки, добавить ReactTestRenderer.act () и ReactTestUtils.act () для пакетного обновления, поддерживать синхронные файлы, передаваемые в React.lazy (), улучшить useReducer Hook API ленивой инициализации. | |
16.8.6 | 27 марта 2019 г. | Исправить неправильную аварийную ситуацию в useReducer (), Исправить предупреждения iframe в Safari DevTools, Предупредить, если для contextType задано значение Context.Consumer вместо Context, Предупредить, если для contextType заданы недопустимые значения. | |
16.9.0 | 9 августа 2019 г. | Добавьте API | |
16.10.0 | 27 сентября 2019 г. | Исправлен крайний случай, когда обновление хуков не запоминалось. Исправьте эвристику для определения того, когда нужно увлажнять, чтобы мы не ошибались во время обновления. Удалите дополнительные поля волокна во время размонтирования для экономии памяти. Исправить ошибку с обязательными текстовыми полями в Firefox. Предпочитайте Object.is вместо встроенного полифила, если он доступен. Исправлена ошибка при смешивании Suspense и обработки ошибок. | |
16.10.1 | 28 сентября 2019 г. | Исправить регрессию в приложениях Next.js, позволив несоответствию задержки во время гидратации продолжаться без вывода сообщений. | |
16.10.2 | 3 октября 2019 г. | Исправить регрессию в react-native-web, восстановив порядок аргументов в экстракторах плагинов событий | |
16.11.0 | 22 октября 2019 г. | Исправлена ошибка, из-за которой обработчики mouseenter не срабатывали дважды внутри вложенных контейнеров React. Удалите экспериментальные API unstable_createRoot и unstable_createSyncRoot. (Они доступны в экспериментальном канале как createRoot и createSyncRoot.) | |
16.12.0 | 14 ноября 2019 г. | React DOM - исправить пассивные эффекты (useEffect ) не запускается в мульти-корневом приложении.React Is - Исправить | |
16.13.0 | 26 февраля 2020 г. | Функции, добавленные в режиме React Concurrent. Исправьте регрессии в основной библиотеке React и React Dom. | |
16.13.1 | 19 марта 2020 г. | Исправить ошибку в устаревшем режиме Suspense. Предупреждение об отмене обновления для нескольких компонентов, происходящих внутри жизненных циклов рендеринга класса | |
16.14.0 | 14 Октябрь 2020 | Добавьте поддержку нового преобразования JSX. | |
17.0.0 | 20 октября 2020 г. | «Нет новых функций» позволяет постепенно обновлять React от старых версий. Добавить новое преобразование JSX, изменения в делегирование событий | |
17.0.1 | 22 октября 2020 г. | React DOM - устраняет сбой в IE11 |
Лицензирование
Первоначальный публичный выпуск React в мае 2013 года использовал Лицензия Apache 2.0. В октябре 2014 года React 0.12.0 заменил это на Лицензия BSD с 3 пунктами и добавлен отдельный текстовый файл PATENTS, который разрешает использование любых патентов Facebook, связанных с программным обеспечением:[44]
Лицензия, предоставленная в соответствии с настоящим Соглашением, автоматически и без уведомления прекращает свое действие для любого, кто предъявляет какие-либо претензии (в том числе путем подачи любого судебного иска, утверждения или других действий), ссылаясь на (а) прямое, косвенное или сопутствующее нарушение или побуждение к нарушению любого патента: (i ) со стороны Facebook или любой из ее дочерних или аффилированных компаний, независимо от того, связаны ли такие претензии с Программным обеспечением, (ii) любой стороной, если такая претензия полностью или частично возникает из любого программного обеспечения, продукта или услуги Facebook или любого из ее дочерние компании или аффилированные лица, независимо от того, связаны ли такие претензии с Программным обеспечением, или (iii) какой-либо стороной, имеющей отношение к Программному обеспечению; или (б) что любое право в любой патентной заявке Facebook является недействительным или не имеющим исковой силы.
Этот нетрадиционный пункт вызвал некоторые споры и дебаты в сообществе пользователей React, поскольку его можно интерпретировать как уполномочивающий Facebook отзывать лицензию во многих сценариях, например, если Facebook подает в суд на лицензиата, предлагая им предпринять «другие действия», опубликовав действие. в блоге или в другом месте. Многие выражали опасения, что Facebook может несправедливо использовать положение о прекращении действия или что интеграция React в продукт может осложнить приобретение новой компании в будущем.[45]
Основываясь на отзывах сообщества, Facebook обновил выдачу патента в апреле 2015 года, сделав его менее двусмысленным и более разрешительным:[46]
Лицензия, предоставленная по настоящему Соглашению, будет прекращена автоматически и без предварительного уведомления, если вы (или любая из ваших дочерних компаний, корпоративных филиалов или агентов) инициируете прямо или косвенно или примете прямую финансовую заинтересованность в любом Заявлении о патенте: (i) против Facebook или любого другого своих дочерних компаний или корпоративных аффилированных лиц, (ii) против любой стороны, если такое Заявление о патенте возникает полностью или частично из любого программного обеспечения, технологии, продукта или услуги Facebook или любой из ее дочерних компаний или корпоративных филиалов, или (iii) против любой стороны относящиеся к Программному обеспечению. [...] «Заявление о патенте» - это любой судебный процесс или иное действие, предполагающее прямое, косвенное или сопутствующее нарушение или побуждение к нарушению любого патента, включая встречный иск или встречный иск.[47]
В Фонд программного обеспечения Apache сочла это лицензионное соглашение несовместимым с его политикой лицензирования, поскольку оно «перекладывает риск на нижележащих потребителей нашего программного обеспечения, несбалансированное в пользу лицензиара, а не лицензиата, тем самым нарушая нашу правовую политику Apache как универсального донора», и » не являются подмножеством тех, которые содержатся в [Apache License 2.0], и их нельзя сублицензировать как [Apache License 2.0] ».[48] В августе 2017 года Facebook отклонил обеспокоенность Apache Foundation по поводу нисходящего потока и отказался пересмотреть свою лицензию.[49][50] В следующем месяце WordPress решили переключить свои проекты Gutenberg и Calypso с React.[51]
23 сентября 2017 года Facebook объявил, что на следующей неделе повторно лицензирует Flow, Шутка, React и Immutable.js по стандарту Лицензия MIT; компания заявила, что React был «основой широкой экосистемы программного обеспечения с открытым исходным кодом для Интернета» и что они не хотели «сдерживать прогресс по нетехническим причинам».[52]
26 сентября 2017 года был выпущен React 16.0.0 с лицензией MIT.[53] Изменение лицензии MIT также было перенесено в линию выпуска 15.x с React 15.6.2.[54]
Смотрите также
- React Native
- AngularJS
- Угловой
- Backbone.js
- Ember.js
- Svelte
- Vue.js
- Сравнение библиотек JavaScript
- Веб-компоненты
Рекомендации
- ^ Оккино, Том; Уолке, Иордания. «Приложения JS в Facebook». YouTube. Получено 22 октября 2018.
- ^ «Выпуск v17.0.0». 20 октября 2020.
- ^ а б «React - библиотека JavaScript для создания пользовательских интерфейсов». Реагировать. Получено 7 апреля 2018.
- ^ Криль, Пол (15 мая 2014 г.). «React: создание более быстрых и плавных интерфейсов для веб-приложений, управляемых данными». InfoWorld.
- ^ Хемель, Зеф (3 июня 2013 г.). «Библиотека пользовательских интерфейсов Facebook React JavaScript получает неоднозначные отзывы». InfoQ.
- ^ Доусон, Крис (25 июля 2014 г.). "История JavaScript и как это привело к ReactJS". Новый стек.
- ^ Дере, Мохан (19.02.2018). «Как интегрировать приложение create-response-app со всеми библиотеками, необходимыми для создания отличного приложения». freeCodeCamp. Получено 2018-06-14.
- ^ Самп, Джон (13.01.2018). "Реагировать маршрутизатор на первый маршрутизатор Redux". О Codecademy. Получено 2018-06-14.
- ^ «Redux · Контейнер предсказуемого состояния для приложений JS». redux.js.org. Получено 2019-10-23.
- ^ "React Router: декларативная маршрутизация для React". ReactRouterВеб-сайт. Получено 2019-10-23.
- ^ «Компоненты и реквизит». Реагировать. Facebook. Получено 7 апреля 2018.
- ^ «Ссылки и ДОМ». Блог React.
- ^ «Черновик: спецификация JSX». JSX. Facebook. Получено 7 апреля 2018.
- ^ Кларк, Эндрю (26 сентября 2017 г.). "React v16.0§Новые типы возвращаемых результатов рендеринга: фрагменты и строки". Блог React.
- ^ "React.Component: render". Реагировать.
- ^ Кларк, Эндрю (26 сентября 2017 г.). "React v16.0§Поддержка настраиваемых атрибутов DOM". Блог React.
- ^ Фишер, Людовико (06.09.2017). Реагировать по-настоящему: интерфейсный код, не запутанный. Прагматическая книжная полка. ISBN 9781680504484.
- ^ «Почему мы создали React? - Блог React».
- ^ "Изоморфная реакция PayPal". В архиве из оригинала от 08.02.2019.
- ^ "Изоморфная реакция Netflix".
- ^ «Краткий обзор хуков - реакция». reactjs.org. Получено 2019-08-08.
- ^ "Что, черт возьми, такое React Hooks?". Soshace. 2020-01-16. Получено 2020-01-24.
- ^ "Использование State Hook - React". reactjs.org. Получено 2020-01-24.
- ^ "Использование обработчика эффектов - реакция". reactjs.org. Получено 2020-01-24.
- ^ «Справочник по API хуков - React». reactjs.org. Получено 2020-01-24.
- ^ "Правила хуков - реакция". reactjs.org. Получено 2020-01-24.
- ^ "Создание собственных хуков - реакция". reactjs.org. Получено 2020-01-24.
- ^ "Глубокий обзор". Поток. Facebook. Получено 7 апреля 2018.
- ^ Джонсон, Николас. «Введение в Flux - упражнения на реакцию». Николас Джонсон. Получено 7 апреля 2018.
- ^ Абрамов, Дан. «История React и Flux с Дэном Абрамовым». Три разработчика и возможно. Получено 7 апреля 2018.
- ^ «Инструменты государственного управления - результаты». Состояние JavaScript. Получено 7 апреля 2018.
- ^ "Встречи заметки". Реагировать Обсудить. Получено 2015-12-13.
- ^ "reactjs / react-future - будущее React". GitHub. Получено 2015-12-13.
- ^ "facebook / response - проблемы с запросом функции". GitHub. Получено 2015-12-13.
- ^ Уолке, Иордания. "FaxJS". Получено 11 июля 2019.
- ^ а б Папп, Андреа (4 апреля 2018 г.). «История React.js на временной шкале». RisingStack. Получено 11 июля 2019.
- ^ "Пит Хант из TXJS".
- ^ Фредерик Лардинуа (18 апреля 2017 г.). «Facebook объявляет о выпуске React Fiber, новой версии своей библиотеки React». TechCrunch. Получено 19 апреля 2017.
- ^ «Архитектура React Fiber». Github. Получено 19 апреля 2017.
- ^ ""React v16.0 ". react.js. 2017-09-26. Получено 2019-05-20.
- ^ ""React v16.8 ". react.js. 2019-02-16. Получено 2019-05-20.
- ^ "Знакомство с крючками". react.js. Получено 2019-05-20.
- ^ url =https://reactjs.org/blog/2020/08/10/react-v17-rc.html
- ^ "Реагировать на CHANGELOG.md". GitHub.
- ^ Лю, Остин. «Убедительная причина не использовать ReactJS». Середина.
- ^ «Обновление нашего патента на открытый исходный код».
- ^ «Дополнительное предоставление патентных прав, версия 2». GitHub.
- ^ «Ранее задаваемые юридические вопросы по ASF». Фонд программного обеспечения Apache. Получено 2017-07-16.
- ^ «Объяснение лицензии React». Facebook. Получено 2017-08-18.
- ^ «Рассмотрите возможность повторного лицензирования до AL v2.0, как это только что сделала RocksDB». Github. Получено 2017-08-18.
- ^ «WordPress откажется от библиотеки React из-за риска, связанного с патентной оговоркой Facebook». TechCrunch. Получено 2017-09-16.
- ^ "Перезапуск React, Jest, Flow и Immutable.js". Код Facebook. 2017-09-23.
- ^ Кларк, Эндрю (26 сентября 2017 г.). "React v16.0§MIT лицензировано". Блог React.
- ^ Хунзакер, Натан (25 сентября 2017 г.). "React v15.6.2". Блог React.