Jump to content

Реагировать (библиотека JavaScript)

(Перенаправлено с React.js )
Реагировать
Оригинальный автор(ы) Джордан Уок
Разработчик(и) Мета и сообщество
Первоначальный выпуск 29 мая 2013 г .; 11 лет назад ( 29 мая 2013 ) [1]
Стабильная версия
18.3.1 [2]  Отредактируйте это в Викиданных / 26 апреля 2024 г .; 3 месяца назад ( 26 апреля 2024 г. )
Предварительный выпуск
19.0- бета / 25 апреля 2024 г .; 3 месяца назад ( 25.04.2024 ) [3]
Репозиторий
Написано в JavaScript
Платформа Веб-платформа
Тип библиотека JavaScript
Лицензия МОЯ лицензия
Веб-сайт реагировать .dev  Edit this on Wikidata

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

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

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

[ редактировать ]

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

[ редактировать ]

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

Компоненты

[ редактировать ]

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

Два основных способа объявления компонентов в React — через функциональные компоненты и компоненты классов. [11] : 118  [14] : 10 

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

[ редактировать ]

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

Реагирующие хуки

[ редактировать ]

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

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

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

[ редактировать ]

Есть два правила крючков [22] которые описывают характерные шаблоны кода, на которые полагаются перехватчики:

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

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

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

[ редактировать ]

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

async function MyComponent() {
  const message = await fetchMessageFromDb();

  return (
    <div>Message: {message}</div>
  );
}

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

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

[ редактировать ]

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

class ParentComponent extends React.Component {
  state = { color: 'green' };
  render() {
    return (
      <ChildComponent color={this.state.color} />
    );
  }
}

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

Обновления

[ редактировать ]

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

Обновления RealDOM регулируются VirtualDOM.
VirtualDOM без труда обновит реальныйDOM в режиме реального времени.

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

[ редактировать ]

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

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

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

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

class App extends React.Component {
  render() {
    return (
      <div>
        <p>Header</p>
        <p>Content</p>
        <p>Footer</p>
      </div>
    );
  }
}

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

[ редактировать ]

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

Серверный рендеринг

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

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

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

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

Версии
Version Release Date Changes
0.3.0 29 May 2013 Initial Public Release
0.4.0 20 July 2013 Support for comment nodes <div>{/* */}</div>, Improved server-side rendering APIs, Removed React.autoBind, Support for the key prop, Improvements to forms, Fixed bugs.
0.5.0 20 October 2013 Improve Memory usage, Support for Selection and Composition events, Support for getInitialState and getDefaultProps in mixins, Added React.version and React.isValidClass, Improved compatibility for Windows.
0.8.0 20 December 2013 Added support for rows & cols, defer & async, loop for <audio> & <video>, autoCorrect attributes. Added onContextMenu events, Upgraded jstransform and esprima-fb tools, Upgraded browserify.
0.9.0 20 February 2014 Added support for crossOrigin, download and hrefLang, mediaGroup and muted, sandbox, seamless, and srcDoc, scope attributes, Added any, arrayOf, component, oneOfType, renderable, shape to React.PropTypes, Added support for onMouseOver and onMouseOut event, Added support for onLoad and onError on <img> elements.
0.10.0 21 March 2014 Added support for srcSet and textAnchor attributes, add update function for immutable data, Ensure all void elements don't insert a closing tag.
0.11.0 17 July 2014 Improved SVG support, Normalized e.view event, Update $apply command, Added support for namespaces, Added new transformWithDetails API, includes pre-built packages under dist/, MyComponent() now returns a descriptor, not an instance.
0.12.0 21 November 2014 Added new features Spread operator ({...}) introduced to deprecate this.transferPropsTo, Added support for acceptCharset, classID, manifest HTML attributes, React.addons.batchedUpdates added to API, @jsx React.DOM no longer required, Fixed issues with CSS Transitions.
0.13.0 10 March 2015 Deprecated patterns that warned in 0.12 no longer work, ref resolution order has changed, Removed properties this._pendingState and this._rootNodeID, Support ES6 classes, Added API React.findDOMNode(component), Support for iterators and immutable-js sequences, Added new features React.addons.createFragment, deprecated React.addons.classSet.
0.14.1 29 October 2015 Added support for srcLang, default, kind attributes, and color attribute, Ensured legacy .props access on DOM nodes, Fixed scryRenderedDOMComponentsWithClass, Added react-dom.js.
15.0.0 7 April 2016 Initial render now uses document.createElement instead of generating HTML, No more extra <span>s, Improved SVG support, ReactPerf.getLastMeasurements() is opaque, New deprecations introduced with a warning, Fixed multiple small memory leaks, React DOM now supports the cite and profile HTML attributes and cssFloat, gridRow and gridColumn CSS properties.
15.1.0 20 May 2016 Fix a batching bug, Ensure use of the latest object-assign, Fix regression, Remove use of merge utility, Renamed some modules.
15.2.0 1 July 2016 Include component stack information, Stop validating props at mount time, Add React.PropTypes.symbol, Add onLoad handling to <link> and onError handling to <source> element, Add isRunning() API, Fix performance regression.
15.3.0 30 July 2016 Add React.PureComponent, Fix issue with nested server rendering, Add xmlns, xmlnsXlink to support SVG attributes and referrerPolicy to HTML attributes, updates React Perf Add-on, Fixed issue with ref.
15.3.1 19 August 2016 Improve performance of development builds, Cleanup internal hooks, Upgrade fbjs, Improve startup time of React, Fix memory leak in server rendering, fix React Test Renderer, Change trackedTouchCount invariant into a console.error.
15.4.0 16 November 2016 React package and browser build no longer includes React DOM, Improved development performance, Fixed occasional test failures, update batchedUpdates API, React Perf, and ReactTestRenderer.create().
15.4.1 23 November 2016 Restructure variable assignment, Fixed event handling, Fixed compatibility of browser build with AMD environments.
15.4.2 6 January 2017 Fixed build issues, Added missing package dependencies, Improved error messages.
15.5.0 7 April 2017 Added react-dom/test-utils, Removed peerDependencies, Fixed issue with Closure Compiler, Added a deprecation warning for React.createClass and React.PropTypes, Fixed Chrome bug.
15.5.4 11 April 2017 Fix compatibility with Enzyme by exposing batchedUpdates on shallow renderer, Update version of prop-types, Fix react-addons-create-fragment package to include loose-envify transform.
15.6.0 13 June 2017 Add support for CSS variables in style attribute and Grid style properties, Fix AMD support for addons depending on react, Remove unnecessary dependency, Add a deprecation warning for React.createClass and React.DOM factory helpers.
16.0.0 26 September 2017 Improved error handling with introduction of "error boundaries", React DOM allows passing non-standard attributes, Minor changes to setState behavior, remove react-with-addons.js build, Add React.createClass as create-react-class, React.PropTypes as prop-types, React.DOM as react-dom-factories, changes to the behavior of scheduling and lifecycle methods.
16.1.0 9 November 2017 Discontinuing Bower Releases, Fix an accidental extra global variable in the UMD builds, Fix onMouseEnter and onMouseLeave firing, Fix <textarea> placeholder, Remove unused code, Add a missing package.json dependency, Add support for React DevTools.
16.3.0 29 March 2018 Add a new officially supported context API, Add new packagePrevent an infinite loop when attempting to render portals with SSR, Fix an issue with this.state, Fix an IE/Edge issue.
16.3.1 3 April 2018 Prefix private API, Fix performance regression and error handling bugs in development mode, Add peer dependency, Fix a false positive warning in IE11 when using Fragment.
16.3.2 16 April 2018 Fix an IE crash, Fix labels in User Timing measurements, Add a UMD build, Improve performance of unstable_observedBits API with nesting.
16.4.0 24 May 2018 Add support for Pointer Events specification, Add the ability to specify propTypes, Fix reading context, Fix the getDerivedStateFromProps() support, Fix a testInstance.parent crash, Add React.unstable_Profiler component for measuring performance, Change internal event names.
16.5.0 5 September 2018 Add support for React DevTools Profiler, Handle errors in more edge cases gracefully, Add react-dom/profiling, Add onAuxClick event for browsers, Add movementX and movementY fields to mouse events, Add tangentialPressure and twist fields to pointer event.
16.6.0 23 October 2018 Add support for contextType, Support priority levels, continuations, and wrapped callbacks, Improve the fallback mechanism, Fix gray overlay on iOS Safari, Add React.lazy() for code splitting components.
16.7.0 20 December 2018 Fix performance of React.lazy for lazily-loaded components, Clear fields on unmount to avoid memory leaks, Fix bug with SSR, Fix a performance regression.
16.8.0 6 February 2019 Add Hooks, Add ReactTestRenderer.act() and ReactTestUtils.act() for batching updates, Support synchronous thenables passed to React.lazy(), Improve useReducer Hook lazy initialization API.
16.8.6 27 March 2019 Fix an incorrect bailout in useReducer(), Fix iframe warnings in Safari DevTools, Warn if contextType is set to Context.Consumer instead of Context, Warn if contextType is set to invalid values.
16.9.0 9 August 2019 Add React.Profiler API for gathering performance measurements programmatically. Remove unstable_ConcurrentMode in favor of unstable_createRoot
16.10.0 27 September 2019 Fix edge case where a hook update wasn't being memoized. Fix heuristic for determining when to hydrate, so we don't incorrectly hydrate during an update. Clear additional fiber fields during unmount to save memory. Fix bug with required text fields in Firefox. Prefer Object.is instead of inline polyfill, when available. Fix bug when mixing Suspense and error handling.
16.10.1 28 September 2019 Fix regression in Next.js apps by allowing Suspense mismatch during hydration to silently proceed
16.10.2 3 October 2019 Fix regression in react-native-web by restoring order of arguments in event plugin extractors
16.11.0 22 October 2019 Fix mouseenter handlers from firing twice inside nested React containers. Remove unstable_createRoot and unstable_createSyncRoot experimental APIs. (These are available in the Experimental channel as createRoot and createSyncRoot.)
16.12.0 14 November 2019 React DOM - Fix passive effects (useEffect) not being fired in a multi-root app.

React Is - Fix lazy and memo types considered elements instead of components

16.13.0 26 February 2020 Features added in React Concurrent mode.

Fix regressions in React core library and React Dom.

16.13.1 19 March 2020 Fix bug in legacy mode Suspense.

Revert warning for cross-component updates that happen inside class render lifecycles

16.14.0 14 October 2020 Add support for the new JSX transform.
17.0.0 20 October 2020 "No New Features" enables gradual React updates from older versions.

Add new JSX Transform, Changes to Event Delegation

17.0.1 22 October 2020 React DOM - Fixes a crash in IE11
17.0.2 22 March 2021 React DOM - Remove an unused dependency to address the SharedArrayBuffer cross-origin isolation warning.
18.0.0 29 March 2022 Concurrent React, Automatic batching, New Suspense Features, Transitions, Client and Server Rendering APIs, New Strict Mode Behaviors, New Hooks [52]
18.1.0 26 April 2022 Many fixes and performance improvements
18.2.0 14 June 2022 Many more fixes and performance improvements

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

[ редактировать ]

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

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

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

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

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

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

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

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

См. также

[ редактировать ]
  1. ^ Оккино, Том; Уок, Джордан (5 августа 2013 г.). «JS-приложения в Facebook» . Ютуб . Архивировано из оригинала 31 мая 2022 года . Проверено 22 октября 2018 г.
  2. ^ https://registry.npmjs.com/react . {{cite web}}: Отсутствует или пусто |title= ( помощь )
  3. ^ «Что нового в React 19» . Архивировано из оригинала 12 мая 2024 г. Проверено 12 мая 2024 г.
  4. ^ Перейти обратно: а б «React — библиотека JavaScript для создания пользовательских интерфейсов» . сайт реакцииjs.org . Архивировано из оригинала 8 апреля 2018 года . Проверено 7 апреля 2018 г.
  5. ^ «Глава 1. Что такое React? — Что такое React и почему это важно [Книга]» . www.oreilly.com . Архивировано из оригинала 6 мая 2023 года . Проверено 6 мая 2023 г.
  6. ^ Крил, Пол (15 мая 2014 г.). «React: создание более быстрых и плавных пользовательских интерфейсов для веб-приложений, управляемых данными» . Инфомир . Архивировано из оригинала 12 июня 2018 г. Проверено 23 февраля 2021 г.
  7. ^ Хемель, Зеф (3 июня 2013 г.). «Библиотека пользовательских интерфейсов React JavaScript от Facebook получает неоднозначные отзывы» . infoq.com . Архивировано из оригинала 26 мая 2022 года . Проверено 11 января 2022 г.
  8. ^ Доусон, Крис (25 июля 2014 г.). «История JavaScript и как она привела к появлению ReactJS» . Новый стек . Архивировано из оригинала 6 августа 2020 г. Проверено 19 июля 2020 г.
  9. ^ Вы 2017 .
  10. ^ Панчал 2022 .
  11. ^ Перейти обратно: а б с д и ж г час я дж к л Верух 2020 .
  12. ^ Шварцмюллер 2018 .
  13. ^ «Компоненты и реквизит» . Реагируйте . Фейсбук. Архивировано из оригинала 7 апреля 2018 года . Проверено 7 апреля 2018 г.
  14. ^ Перейти обратно: а б с д и ж Ларсен 2021 .
  15. ^ «Знакомство с крючками» . реакция.js. Архивировано из оригинала 25 октября 2018 г. Проверено 20 мая 2019 г.
  16. ^ «Краткий обзор крючков – React» . сайт реакцииjs.org . Архивировано из оригинала 15 марта 2023 г. Проверено 8 августа 2019 г.
  17. ^ «Что, черт возьми, такое React Hooks?» . Сошаче . 16 января 2020 г. Архивировано из оригинала 31 мая 2022 г. Проверено 24 января 2020 г.
  18. ^ «Использование State Hook – React» . сайт реакцииjs.org . Архивировано из оригинала 30 июля 2022 г. Проверено 24 января 2020 г.
  19. ^ Перейти обратно: а б с «Использование State Hook – React» . сайт реакцииjs.org . Архивировано из оригинала 30 июля 2022 г. Проверено 24 января 2020 г.
  20. ^ «Использование хука эффекта – React» . сайт реакцииjs.org . Архивировано из оригинала 01 августа 2022 г. Проверено 24 января 2020 г.
  21. ^ «Справочник по API хуков – React» . сайт реакцииjs.org . Архивировано из оригинала 05 августа 2022 г. Проверено 24 января 2020 г.
  22. ^ «Правила хуков — React» . сайт реакцииjs.org . Архивировано из оригинала 6 июня 2021 г. Проверено 24 января 2020 г.
  23. ^ «Создание собственных хуков – React» . сайт реакцииjs.org . Архивировано из оригинала 17 июля 2022 г. Проверено 24 января 2020 г.
  24. ^ «React Labs: над чем мы работаем – март 2023 г.» . реакция.dev . Архивировано из оригинала 26 июля 2023 г. Проверено 23 июля 2023 г.
  25. ^ Чурасия, Равнак (08 марта 2023 г.). «Преобразовать компонент класса в компонент функции (стрелка) — React» . Код на неполный рабочий день . Архивировано из оригинала 15 августа 2023 г. Проверено 15 августа 2023 г.
  26. ^ «Освоение React Router — полное руководство» . 12 июля 2023 г. Архивировано из оригинала 26 июля 2023 г. Проверено 26 июля 2023 г.
  27. ^ «Ссылки и DOM» . Реагирующий блог . Архивировано из оригинала 07 августа 2022 г. Проверено 19 июля 2021 г.
  28. ^ «Реакция: виртуальный DOM» . Кодакадемия . Архивировано из оригинала 28 октября 2021 г. Проверено 14 октября 2021 г.
  29. ^ «ReactDOM – Реагировать» . сайт реакцииjs.org . Архивировано из оригинала 8 января 2023 г. Проверено 8 января 2023 г.
  30. ^ «Примирение – Реагировать» . сайт реакцииjs.org . Архивировано из оригинала 8 января 2023 г. Проверено 8 января 2023 г.
  31. ^ «React.Component – ​​React» . Legacy.reactjs.org . Архивировано из оригинала 9 апреля 2024 г. Проверено 9 апреля 2024 г.
  32. ^ «Черновик: спецификация JSX» . JSX . Фейсбук. 08.03.2022. Архивировано из оригинала 02 апреля 2022 г. Проверено 7 апреля 2018 г.
  33. ^ Хант, Пит (5 июня 2013 г.). «Почему мы создали React? – Блог React» . сайт реакцииjs.org . Архивировано из оригинала 06 апреля 2015 г. Проверено 17 февраля 2022 г.
  34. ^ «Изоморфная реакция PayPal» . Medium.com . 27 апреля 2015 г. Архивировано из оригинала 08 февраля 2019 г. Проверено 8 февраля 2019 г.
  35. ^ «Изоморфная реакция Netflix» . netflixtechblog.com . 28 января 2015 г. Архивировано из оригинала 17 декабря 2016 г. Проверено 14 февраля 2022 г.
  36. ^ «Подробный обзор» . Флюс . Фейсбук. Архивировано из оригинала 7 августа 2022 года . Проверено 7 апреля 2018 г.
  37. ^ «Флюкс-релиз 4.0» . Гитхаб . Архивировано из оригинала 31 мая 2022 года . Проверено 26 февраля 2021 г.
  38. ^ Джонсон, Николас. «Введение в Flux — упражнение по React» . Николас Джонсон . Архивировано из оригинала 31 мая 2022 года . Проверено 7 апреля 2018 г.
  39. ^ Абрамов, Дэн. «История React и Flux с Дэном Абрамовым» . Три разработчика и «Может быть» . Архивировано из оригинала 19 апреля 2018 года . Проверено 7 апреля 2018 г.
  40. ^ «Инструменты управления состоянием – Результаты» . Состояние JavaScript . Архивировано из оригинала 31 мая 2022 года . Проверено 29 октября 2021 г.
  41. ^ «React v16.8: тот, с крючками» . Архивировано из оригинала 8 января 2023 г. Проверено 8 января 2023 г.
  42. ^ «Записки встречи» . Реагировать Обсудить . Архивировано из оригинала 22 декабря 2015 г. Проверено 13 декабря 2015 г.
  43. ^ «reactjs/react-future — будущее React» . Гитхаб . Архивировано из оригинала 13 июля 2022 г. Проверено 13 декабря 2015 г.
  44. ^ «facebook/react — Проблемы с запросом функции» . Гитхаб . Архивировано из оригинала 9 июля 2022 г. Проверено 13 декабря 2015 г.
  45. ^ «React.js: документальный фильм» . Ютуб . Медовый горшок. 10 февраля 2023 г. Архивировано из оригинала 19 января 2024 г. Проверено 27 мая 2024 г.
  46. ^ Лардинуа 2017 .
  47. ^ «Реагировать на волоконную архитектуру» . Гитхаб . Архивировано из оригинала 10 мая 2018 года . Проверено 19 апреля 2017 г.
  48. ^ «Facebook анонсирует React Fiber, переработку своей среды React» . ТехКранч . 18 апреля 2017 г. Архивировано из оригинала 14 июня 2018 г. Проверено 19 октября 2018 г.
  49. ^ «GitHub — acdlite/react-fiber-architecture: описание нового основного алгоритма React, React Fiber» . github.com . Архивировано из оригинала 10 мая 2018 г. Проверено 19 октября 2018 г.
  50. ^ «Реагировать v16.0» . реакция.js. 26 сентября 2017 г. Архивировано из оригинала 3 октября 2017 г. Проверено 20 мая 2019 г.
  51. ^ url= https://reactjs.org/blog/2020/08/10/react-v17-rc.html. Архивировано 10 августа 2020 г. на Wayback Machine.
  52. ^ Перейти обратно: а б «Реагировать v18.0» . сайт реакцииjs.org . Архивировано из оригинала 29 марта 2022 г. Проверено 12 апреля 2022 г.
  53. ^ «Реагировать на CHANGELOG.md» . Гитхаб . Архивировано из оригинала 28 апреля 2020 г. Проверено 9 декабря 2015 г.
  54. ^ Лю, Остин. «Веская причина не использовать ReactJS» . Середина . Архивировано из оригинала 31 мая 2022 г. Проверено 9 декабря 2015 г.
  55. ^ «Обновление нашего патентного гранта на открытый исходный код» . Архивировано из оригинала 08.11.2020 . Проверено 9 декабря 2015 г.
  56. ^ «Дополнительное предоставление патентных прав, версия 2» . Гитхаб . Архивировано из оригинала 31 мая 2022 г. Проверено 9 декабря 2015 г.
  57. ^ «Ранее задаваемые вопросы по юридическим вопросам ASF» . Фонд программного обеспечения Apache. Архивировано из оригинала 06 февраля 2018 г. Проверено 16 июля 2017 г.
  58. ^ «Объяснение лицензии React» . Фейсбук . Архивировано из оригинала 06 мая 2021 г. Проверено 18 августа 2017 г.
  59. ^ «Рассмотрите возможность повторного лицензирования на AL v2.0, как только что сделал RocksDB» . Гитхаб . Архивировано из оригинала 27 июля 2022 г. Проверено 18 августа 2017 г.
  60. ^ «WordPress откажется от библиотеки React из-за риска, связанного с патентной статьей Facebook» . ТехКранч . 15 сентября 2017 г. Архивировано из оригинала 31 мая 2022 г. Проверено 16 сентября 2017 г.
  61. ^ «Перелицензирование React, Jest, Flow и Immutable.js» . Код Фейсбука . 23 сентября 2017 г. Архивировано из оригинала 06 декабря 2020 г. Проверено 23 сентября 2017 г.
  62. ^ Кларк, Эндрю (26 сентября 2017 г.). «React v16.0§MIT с лицензией» . Реагирующий блог . Архивировано из оригинала 3 октября 2017 года . Проверено 18 октября 2017 г.
  63. ^ Ханзакер, Натан (25 сентября 2017 г.). «Реагировать v15.6.2» . Реагирующий блог . Архивировано из оригинала 31 мая 2022 года . Проверено 18 октября 2017 г.

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3bf80c5102d0f481be443377c09ab9ca__1722399060
URL1:https://arc.ask3.ru/arc/aa/3b/ca/3bf80c5102d0f481be443377c09ab9ca.html
Заголовок, (Title) документа по адресу, URL1:
React (JavaScript library) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)