stringtranslate.com

React (библиотека JavaScript)

React (также известный как React.js или ReactJS ) — это бесплатная и открытая библиотека JavaScript [4] [5] для создания пользовательских интерфейсов на основе компонентов от Facebook Inc. Она поддерживается Meta (ранее Facebook) и сообществом отдельных разработчиков и компаний. [6] [7] [8]

React можно использовать для разработки одностраничных , мобильных или серверных приложений с использованием фреймворков вроде Next.js. Поскольку React занимается только пользовательским интерфейсом и отображением компонентов в DOM , приложения React часто полагаются на библиотеки для маршрутизации и других клиентских функций. [9] [10] Ключевым преимуществом React является то, что он перерисовывает только те части страницы, которые изменились, избегая ненужной перерисовки неизмененных элементов DOM. Впервые он был запущен 29 мая 2013 года. [11]

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

Декларативный

[12] React придерживается парадигмы декларативного программирования . [13] : 76  разработчиков проектируют представления для каждого состояния приложения, а React обновляет и отображает компоненты при изменении данных. Это контрастирует с императивным программированием . [14]

Компоненты

Код React состоит из сущностей, называемых компонентами . [13] : 10–12  Эти компоненты являются модульными и могут использоваться повторно. [13] : 70  Приложения React обычно состоят из многих слоев компонентов. Компоненты визуализируются в корневом элементе DOM с помощью библиотеки React DOM. При визуализации компонента значения передаются между компонентами через props (сокращение от «properties») . Значения, внутренние для компонента, называются его состоянием. [15]

Два основных способа объявления компонентов в React — это компоненты-функции и компоненты-классы. [13] : 118  [16] : 10 

Компоненты функции

Компоненты функций объявляются с помощью функции (используя синтаксис функций JavaScript или выражение стрелочной функции ), которая принимает один аргумент "props" и возвращает JSX. Начиная с React v16.8, компоненты функций могут использовать состояние с useStateхуком.

Реакция Хуков

16 февраля 2019 года React 16.8 был выпущен для широкой публики, представив React Hooks. [17] Хуки — это функции, которые позволяют разработчикам «подключаться» к состоянию React и функциям жизненного цикла из компонентов функций. [18] Примечательно, что хуки не работают внутри классов — они позволяют разработчикам использовать больше функций React без классов. [19]

React предоставляет несколько встроенных хуков, таких как useState, [20] [16] : 37  useContext , [13] : 11  [21] [16] : 12  useReducer , [13] : 92  [21] [16] : 65–66  useMemo [13] : 154  [21] [16] : 162  и useEffect. [22] [16] : 93–95  Другие описаны в Справочнике API хуков. [23] [13] : 62  useState и useEffect, которые используются чаще всего, предназначены для управления состоянием [13] : 37  и побочными эффектами [13] : 61  соответственно.

Правила крючков

Существует два правила хуков [24] , которые описывают характерные шаблоны кода, на которые опираются хуки:

  1. «Вызывайте хуки только на верхнем уровне» — не вызывайте хуки из внутренних циклов, условий или вложенных операторов, чтобы хуки вызывались в одном и том же порядке при каждом рендеринге.
  2. «Вызывайте хуки только из функций React» — не вызывайте хуки из простых функций JavaScript, чтобы логика с отслеживанием состояния оставалась в компоненте.

Хотя эти правила не могут быть реализованы во время выполнения, инструменты анализа кода, такие как линтеры, могут быть настроены для обнаружения множества ошибок во время разработки. Правила применяются как к использованию хуков, так и к реализации пользовательских хуков, [25] которые могут вызывать другие хуки.

Компоненты сервера

Компоненты сервера React (RSC) [26] — это функциональные компоненты, которые работают исключительно на сервере. Эта концепция была впервые представлена ​​в докладе «Извлечение данных с помощью серверных компонентов». [27] Хотя концепция похожа на рендеринг на стороне сервера, RSC не отправляют соответствующий JavaScript клиенту, поскольку гидратации не происходит. В результате у них нет доступа к хукам. Однако они могут быть асинхронными функциями , что позволяет им напрямую выполнять асинхронные операции:

асинхронная функция MyComponent () {    const message = await fetchMessageFromDb ();     возвращаться (  < div > Сообщение : { message }</ div >  );}

В настоящее время серверные компоненты наиболее удобны для использования с Next.js.

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

Компоненты класса объявляются с использованием классов ES6 . Они ведут себя так же, как компоненты-функции, но вместо использования хуков для управления состоянием и событиями жизненного цикла они используют методы жизненного цикла базового React.Component класса .

класс ParentComponent расширяет React.Component {     состояние = { цвет : 'зеленый' };      оказывать () {  возвращаться (  < ChildComponent color = { this.state.color } / >   ); }}

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

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

Маршрутизация

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

Существует виртуальный DOM, который используется для реализации реального DOM.

Виртуальный ДОМ

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

Обновления

Когда ReactDOM.render[32] вызывается снова для того же компонента и цели, React представляет новое состояние пользовательского интерфейса в Virtual DOM и определяет, какие части (если таковые имеются) активного DOM необходимо изменить. [33]

Обновления realDOM подлежат virtualDOM
VirtualDOM обновит realDOM в режиме реального времени без особых усилий.

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

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

JSX

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

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

class App extends React.Component { render ( ) { return ( <div> <p> Заголовок </p> <p> Содержимое </p> <p> Нижний колонтитул </p> </div> ) ; } }               

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

Базовая архитектура React применяется не только для рендеринга HTML в браузере. Например, Facebook имеет динамические диаграммы, которые рендерятся по <canvas>тегам, [36] а Netflix и PayPal используют универсальную загрузку для рендеринга идентичного HTML как на сервере, так и на клиенте. [37] [38]

Рендеринг на стороне сервера

Рендеринг на стороне сервера (SSR) относится к процессу рендеринга клиентского приложения JavaScript на сервере, а не в браузере. Это может улучшить производительность приложения, особенно для пользователей с более медленными соединениями или устройствами.

С SSR исходный HTML, отправляемый клиенту, включает полностью отрисованный UI приложения. Это позволяет браузеру клиента отображать UI немедленно, а не ждать загрузки и выполнения JavaScript перед отрисовкой UI.

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

Распространенные идиомы

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

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

Для поддержки концепции однонаправленного потока данных React (которую можно противопоставить двунаправленному потоку AngularJS ) была разработана архитектура Flux как альтернатива популярной архитектуре модель–представление–контроллер . Flux включает действия , которые отправляются через центральный диспетчер в хранилище , а изменения в хранилище распространяются обратно в представление. [39] При использовании с React это распространение осуществляется через свойства компонентов. С момента своего замысла Flux был заменен такими библиотеками, как Redux и MobX. [40]

Поток можно считать вариантом модели наблюдателя . [41]

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

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

В феврале 2019 года useReducerбыл представлен как React hook в выпуске 16.8. Он предоставляет API, который согласуется с Redux, позволяя разработчикам создавать хранилища, подобные Redux, которые являются локальными для состояний компонентов. [44]

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

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

История

React был создан Джорданом Уолком, инженером-программистом из Meta , который изначально разработал прототип под названием «F-Bolt» [48], а затем переименовал его в «FaxJS». Эта ранняя версия задокументирована в репозитории GitHub Джордана Уолка. [1] На проект оказали влияние XHP , библиотека HTML- компонентов для PHP .

React был впервые развернут в новостной ленте Facebook в 2011 году и впоследствии интегрирован в Instagram в 2012 году [ требуется ссылка ] . В мае 2013 года на JSConf US проект был официально открыт с открытым исходным кодом, что стало важным поворотным моментом в его принятии и росте. [2]

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

18 апреля 2017 года Facebook анонсировала React Fiber, новый набор внутренних алгоритмов для рендеринга, в отличие от старого алгоритма рендеринга React, Stack. [49] React Fiber должен был стать основой для любых будущих улучшений и разработки функций библиотеки React. [50] [ требуется обновление ] Фактический синтаксис для программирования с React не меняется; изменился только способ выполнения синтаксиса. [51] Старая система рендеринга React, Stack, была разработана в то время, когда не было понимания фокуса системы на динамических изменениях. Stack медленно отрисовывал сложную анимацию, например, пытаясь выполнить все это за один отрезок. Fiber разбивает анимацию на сегменты, которые можно распределить по нескольким кадрам. Аналогично, структуру страницы можно разбить на сегменты, которые можно поддерживать и обновлять отдельно. Функции JavaScript и виртуальные объекты DOM называются «волокнами», и каждое из них можно использовать и обновлять отдельно, что обеспечивает более плавный рендеринг на экране. [52]

26 сентября 2017 года React 16.0 был выпущен для публики. [53]

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

29 марта 2022 года был выпущен React 18, в котором был представлен новый параллельный рендерер, автоматическое пакетирование и поддержка рендеринга на стороне сервера с помощью Suspense. [55]

Лицензирование

Первоначальный публичный релиз React в мае 2013 года использовал Apache License 2.0 . В октябре 2014 года React 0.12.00 заменил ее на лицензию BSD из 3 пунктов и добавил отдельный текстовый файл PATENTS, который разрешает использование любых патентов Facebook, связанных с программным обеспечением: [56]

Лицензия, предоставленная по настоящему Соглашению, будет автоматически и без уведомления прекращена для любого лица, которое предъявит иск (включая подачу иска, заявления или иного иска), утверждающий (a) прямое, косвенное или косвенное нарушение или побуждение к нарушению любого патента: (i) со стороны Facebook или любой из ее дочерних компаний или филиалов, независимо от того, связано ли такое требование с Программным обеспечением, (ii) любой стороны, если такое требование возникает полностью или частично из любого программного обеспечения, продукта или услуги Facebook или любой из ее дочерних компаний или филиалов, независимо от того, связано ли такое требование с Программным обеспечением, или (iii) любой стороны, связанной с Программным обеспечением; или (b) что любое право в любой патентной претензии Facebook является недействительным или неисполнимым.

Этот нетрадиционный пункт вызвал некоторые противоречия и дебаты в сообществе пользователей React, поскольку его можно было бы интерпретировать как наделение Facebook полномочиями отзывать лицензию во многих сценариях, например, если Facebook подаст в суд на лицензиата, побуждая его предпринять «другие действия», опубликовав действие в блоге или в другом месте. Многие выразили опасения, что Facebook может несправедливо использовать пункт о прекращении или что интеграция React в продукт может усложнить будущее приобретение стартап-компании. [57]

На основе отзывов сообщества Facebook обновил условия выдачи патента в апреле 2015 года, сделав их менее двусмысленными и более разрешительными: [58]

Лицензия, предоставленная по настоящему Соглашению, будет автоматически и без уведомления прекращена, если вы (или любая из ваших дочерних компаний, корпоративных филиалов или агентов) инициируете прямо или косвенно или принимаете прямую финансовую заинтересованность в любой Патентной претензии: (i) против Facebook или любой из ее дочерних компаний или корпоративных филиалов, (ii) против любой стороны, если такая Патентная претензия возникает полностью или частично из любого программного обеспечения, технологии, продукта или услуги Facebook или любой из ее дочерних компаний или корпоративных филиалов, или (iii) против любой стороны, связанной с Программным обеспечением. [...] «Патентная претензия» — это любой судебный иск или иное действие, утверждающее прямое, косвенное или косвенное нарушение или побуждение к нарушению любого патента, включая перекрестный иск или встречный иск. [59]

Apache Software Foundation посчитала это лицензионное соглашение несовместимым с ее политикой лицензирования, поскольку оно «переносит риск на последующих потребителей нашего программного обеспечения, несбалансированно в пользу лицензиара, а не лицензиата, тем самым нарушая нашу юридическую политику Apache как универсального донора», и «не являются подмножеством тех, которые содержатся в [Apache License 2.0], и они не могут быть сублицензированы как [Apache License 2.0]». [60] В августе 2017 года Facebook отклонил последующие опасения Apache Foundation и отказался пересматривать свою лицензию. [61] [62] В следующем месяце WordPress решила переключить свои проекты Gutenberg и Calypso с React. [63]

23 сентября 2017 года Facebook объявила, что на следующей неделе она повторно лицензирует Flow, Jest, React и Immutable.js в соответствии со стандартной лицензией MIT ; компания заявила, что React является «основой широкой экосистемы программного обеспечения с открытым исходным кодом для Интернета», и что они не хотят «сдерживать прогресс по нетехническим причинам». [64]

26 сентября 2017 года React 16.0.0 был выпущен с лицензией MIT. [65] Изменение лицензии MIT также было перенесено в линейку релизов 15.x с React 15.6.2. [66]

Смотрите также

Ссылки

  1. ^ Оккино, Том; Уолк, Джордан (5 августа 2013 г.). «JS Apps at Facebook». YouTube . Архивировано из оригинала 31 мая 2022 г. Получено 22 октября 2018 г.
  2. ^ https://registry.npmjs.com/react. {{cite web}}: Отсутствует или пусто |title=( помощь )
  3. ^ "Что нового в React 19". Архивировано из оригинала 2024-05-12 . Получено 2024-05-12 .
  4. ^ ab "React – библиотека JavaScript для создания пользовательских интерфейсов". reactjs.org . Архивировано из оригинала 8 апреля 2018 г. . Получено 7 апреля 2018 г. .
  5. ^ "Глава 1. Что такое React? - Что такое React и почему это важно [Книга]". www.oreilly.com . Архивировано из оригинала 6 мая 2023 г. . Получено 2023-05-06 .
  6. ^ Крилл, Пол (15 мая 2014 г.). «React: Making faster, smoother UIs for data-driven Web apps». InfoWorld . Архивировано из оригинала 2018-06-12 . Получено 2021-02-23 .
  7. ^ Хемел, Зеф (3 июня 2013 г.). «Библиотека пользовательских интерфейсов React JavaScript от Facebook получила смешанные отзывы». infoq.com . Архивировано из оригинала 26 мая 2022 г. . Получено 11 января 2022 г.
  8. ^ Доусон, Крис (25 июля 2014 г.). «История JavaScript и как она привела к ReactJS». The New Stack . Архивировано из оригинала 6 августа 2020 г. Получено 19 июля 2020 г.
  9. ^ Дере 2017.
  10. ^ Панчал 2022.
  11. ^ «React — это библиотека или фреймворк? Вот почему это важно». freeCodeCamp.org . 2021-04-12 . Получено 2024-10-12 .
  12. ^ "Введение в React". GeeksforGeeks . 2017-09-27 . Получено 2024-10-12 .
  13. ^ abcdefghijkl Wieruch 2020.
  14. ^ Шварцмюллер 2018.
  15. ^ "Components and Props". React . Facebook. Архивировано из оригинала 7 апреля 2018 г. Получено 7 апреля 2018 г.
  16. ^ abcdef Ларсен 2021.
  17. ^ "Введение в хуки". react.js. Архивировано из оригинала 2018-10-25 . Получено 2019-05-20 .
  18. ^ "Hooks at a Glance – React". reactjs.org . Архивировано из оригинала 2023-03-15 . Получено 2019-08-08 .
  19. ^ "Что за чертовщина React Hooks?". Soshace . 2020-01-16. Архивировано из оригинала 2022-05-31 . Получено 2020-01-24 .
  20. ^ "Использование State Hook – React". reactjs.org . Архивировано из оригинала 2022-07-30 . Получено 2020-01-24 .
  21. ^ abc "Использование State Hook – React". reactjs.org . Архивировано из оригинала 2022-07-30 . Получено 2020-01-24 .
  22. ^ "Использование эффекта Hook – React". reactjs.org . Архивировано из оригинала 2022-08-01 . Получено 2020-01-24 .
  23. ^ "Hooks API Reference – React". reactjs.org . Архивировано из оригинала 2022-08-05 . Получено 2020-01-24 .
  24. ^ "Rules of Hooks – React". reactjs.org . Архивировано из оригинала 2021-06-06 . Получено 2020-01-24 .
  25. ^ "Building Your Own Hooks – React". reactjs.org . Архивировано из оригинала 2022-07-17 . Получено 2020-01-24 .
  26. ^ "React Labs: Над чем мы работаем – март 2023 г.". react.dev . Архивировано из оригинала 2023-07-26 . Получено 2023-07-23 .
  27. ^ Абрамов, Дэн; Тан, Лорен; Савона, Джозеф; Маркбоге, Себастьян (21.12.2020). «Введение в компоненты сервера React Zero-Bundle-Size». react.dev . Получено 28.09.2024 .
  28. ^ Chourasia, Rawnak (2023-03-08). "Преобразовать компонент класса в компонент функции (стрелки) – React". Code Part Time . Архивировано из оригинала 2023-08-15 . Получено 2023-08-15 .
  29. ^ "Mastering React Router – The Ultimate Guide". 2023-07-12. Архивировано из оригинала 2023-07-26 . Получено 2023-07-26 .
  30. ^ "Refs and the DOM". React Blog . Архивировано из оригинала 2022-08-07 . Получено 2021-07-19 .
  31. ^ "React: The Virtual DOM". Codecademy . Архивировано из оригинала 2021-10-28 . Получено 2021-10-14 .
  32. ^ "ReactDOM – React". reactjs.org . Архивировано из оригинала 2023-01-08 . Получено 2023-01-08 .
  33. ^ "Reconciliation – React". reactjs.org . Архивировано из оригинала 2023-01-08 . Получено 2023-01-08 .
  34. ^ "React.Component – ​​React". legacy.reactjs.org . Архивировано из оригинала 2024-04-09 . Получено 2024-04-09 .
  35. ^ "Draft: JSX Specification". JSX . Facebook. 2022-03-08. Архивировано из оригинала 2022-04-02 . Получено 7 апреля 2018 .
  36. ^ Хант, Пит (2013-06-05). «Почему мы создали React? – Блог React». reactjs.org . Архивировано из оригинала 2015-04-06 . Получено 2022-02-17 .
  37. ^ "PayPal Isomorphic React". medium.com . 2015-04-27. Архивировано из оригинала 2019-02-08 . Получено 2019-02-08 .
  38. ^ "Netflix Isomorphic React". netflixtechblog.com . 2015-01-28. Архивировано из оригинала 2016-12-17 . Получено 2022-02-14 .
  39. ^ "In Depth OverView". Flux . Facebook. Архивировано из оригинала 7 августа 2022 г. Получено 7 апреля 2018 г.
  40. ^ "Flux Release 4.0". Github . Архивировано из оригинала 31 мая 2022 г. Получено 26 февраля 2021 г.
  41. ^ Джонсон, Николас. «Введение в Flux – Упражнение React». Николас Джонсон . Архивировано из оригинала 31 мая 2022 года . Получено 7 апреля 2018 года .
  42. ^ Абрамов, Дэн. «История React и Flux с Дэном Абрамовым». Three Devs and a Maybe . Архивировано из оригинала 19 апреля 2018 года . Получено 7 апреля 2018 года .
  43. ^ "State Management Tools – Results". The State of JavaScript . Архивировано из оригинала 31 мая 2022 г. Получено 29 октября 2021 г.
  44. ^ "React v16.8: The One with Hooks". Архивировано из оригинала 2023-01-08 . Получено 2023-01-08 .
  45. ^ "Meeting Notes". React Discuss . Архивировано из оригинала 2015-12-22 . Получено 2015-12-13 .
  46. ^ "reactjs/react-future – Будущее React". GitHub . Архивировано из оригинала 2022-07-13 . Получено 2015-12-13 .
  47. ^ "facebook/react – Проблемы с запросами функций". GitHub . Архивировано из оригинала 2022-07-09 . Получено 2015-12-13 .
  48. ^ "React.js: The Documentary". Youtube . Honeypot. 10 февраля 2023 г. Архивировано из оригинала 2024-01-19 . Получено 2024-05-27 .
  49. ^ Лардинойс 2017.
  50. ^ "React Fiber Architecture". Github . Архивировано из оригинала 10 мая 2018 г. Получено 19 апреля 2017 г.
  51. ^ "Facebook анонсирует React Fiber, переписанный фреймворк React". TechCrunch . 18 апреля 2017 г. Архивировано из оригинала 2018-06-14 . Получено 2018-10-19 .
  52. ^ "GitHub – acdlite/react-fiber-architecture: Описание нового основного алгоритма React, React Fiber". github.com . Архивировано из оригинала 2018-05-10 . Получено 2018-10-19 .
  53. ^ "React v16.0". react.js. 2017-09-26. Архивировано из оригинала 2017-10-03 . Получено 2019-05-20 .
  54. ^ url=https://reactjs.org/blog/2020/08/10/react-v17-rc.html Архивировано 10.08.2020 на Wayback Machine
  55. ^ ab "React v18.0". reactjs.org . Архивировано из оригинала 2022-03-29 . Получено 2022-04-12 .
  56. ^ "React CHANGELOG.md". GitHub . Архивировано из оригинала 2020-04-28 . Получено 2015-12-09 .
  57. ^ Лю, Остин. "Убедительная причина не использовать ReactJS". Medium . Архивировано из оригинала 2022-05-31 . Получено 2015-12-09 .
  58. ^ "Обновление нашего патента на программное обеспечение с открытым исходным кодом". Архивировано из оригинала 2020-11-08 . Получено 2015-12-09 .
  59. ^ "Дополнительное предоставление патентных прав, версия 2". GitHub . Архивировано из оригинала 2022-05-31 . Получено 2015-12-09 .
  60. ^ "ASF Legal Previously Asked Questions". Apache Software Foundation. Архивировано из оригинала 2018-02-06 . Получено 2017-07-16 .
  61. ^ "Explaining React's License". Facebook . Архивировано из оригинала 2021-05-06 . Получено 2017-08-18 .
  62. ^ "Рассмотрите возможность повторного лицензирования AL v2.0, как это только что сделала RocksDB". Github . Архивировано из оригинала 2022-07-27 . Получено 2017-08-18 .
  63. ^ "WordPress отказывается от библиотеки React из-за риска патентной оговорки Facebook". TechCrunch . 15 сентября 2017 г. Архивировано из оригинала 2022-05-31 . Получено 2017-09-16 .
  64. ^ «Повторное лицензирование React, Jest, Flow и Immutable.js». Facebook Code . 2017-09-23. Архивировано из оригинала 2020-12-06 . Получено 2017-09-23 .
  65. ^ Кларк, Эндрю (26 сентября 2017 г.). «React v16.0§лицензирован MIT». Блог React . Архивировано из оригинала 3 октября 2017 г. Получено 18 октября 2017 г.
  66. ^ Hunzaker, Nathan (25 сентября 2017 г.). "React v15.6.2". React Blog . Архивировано из оригинала 31 мая 2022 г. Получено 18 октября 2017 г.

Библиография

Внешние ссылки