React (bibliothèque JavaScript) - React (JavaScript library)

Réagir
React-icon.svg
Auteur(s) original(aux) Jordan Walke
Développeur(s) Facebook et communauté
Première version 29 mai 2013 ; il y a 8 ans ( 2013-05-29 )
Version stable
17.0.2  Modifiez ceci sur Wikidata / 22 mars 2021 ; il y a 6 mois ( 22 mars 2021 )
Dépôt
Écrit en JavaScript
Plate-forme Plateforme Web
Taper bibliothèque JavaScript
Licence Licence MIT
Site Internet reactjs .org Modifiez ceci sur Wikidata

React (également connu sous le nom de React.js ou ReactJS ) est une bibliothèque JavaScript frontale gratuite et open source permettant de créer des interfaces utilisateur ou des composants d' interface utilisateur. Il est maintenu par Facebook et une communauté de développeurs individuels et d'entreprises. React peut être utilisé comme une base dans le développement de une seule page des applications ou mobiles. Cependant, React ne concerne que la gestion de l'état et le rendu de cet état dans le DOM , donc la création d'applications React nécessite généralement l'utilisation de bibliothèques supplémentaires pour le routage, ainsi que certaines fonctionnalités côté client.

Utilisation de base

Ce qui suit est un exemple rudimentaire d'utilisation de React en HTML avec JSX et JavaScript.

<div id="myReactApp"></div>

<script type="text/babel">
  function Greeter(props) {
    return <h1>{props.greeting}</h1>;
  }
  let App = <Greeter greeting="Hello World!" />;
  ReactDOM.render(App, document.getElementById('myReactApp'));
</script>

La Greeterfonction est un composant React qui accepte une propriété greeting. La variable Appest une instance du Greetercomposant où la greetingpropriété est définie sur 'Hello World!'. La ReactDOM.renderméthode rend ensuite notre composant Greeter à l'intérieur de l' élément DOM avec id myReactApp.

Lorsqu'il est affiché dans un navigateur Web, le résultat sera

<div id="myReactApp">
  <h1>Hello World!</h1>
</div>

Caractéristiques notables

Composants

Le code React est composé d'entités appelées composants. Les composants peuvent être rendus à un élément particulier du DOM à l'aide de la bibliothèque React DOM. Lors du rendu d'un composant, on peut passer des valeurs appelées "props":

ReactDOM.render(<Greeter greeting="Hello World!" />, document.getElementById('myReactApp'));

Les deux principales façons de déclarer des composants dans React sont via les composants de fonction et les composants basés sur les classes.

Composants fonctionnels

Les composants de fonction sont déclarés avec une fonction qui renvoie ensuite du JSX.

const Greeter = (props) => <div>Hello, {props.name}!</div>;

Composants basés sur les classes

Les composants basés sur les classes sont déclarés à l'aide des classes ES6 .

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

DOM virtuel

Une autre caractéristique notable est l'utilisation d'un modèle d'objet de document virtuel , ou DOM virtuel. Réagir crée un en mémoire cache des données structure, calcule les différences qui en résultent, puis met à jour DOM affichée du navigateur efficacement. Ce processus est appelé réconciliation . Cela permet au programmeur d'écrire du code comme si la page entière était rendue à chaque modification, tandis que les bibliothèques React ne rendent que les sous-composants qui changent réellement. Ce rendu sélectif offre un gain de performances majeur. Cela évite de recalculer le style CSS, la mise en page de la page et le rendu de la page entière.

Méthodes de cycle de vie

Les méthodes de cycle de vie utilisent une forme d' accrochage qui permet l'exécution de code à des points définis pendant la durée de vie d'un composant.

  • shouldComponentUpdate permet au développeur d'empêcher un nouveau rendu inutile d'un composant en retournant false si un rendu n'est pas requis.
  • componentDidMountest appelé une fois le composant "monté" (le composant a été créé dans l'interface utilisateur, souvent en l'associant à un nœud DOM ). Ceci est couramment utilisé pour déclencher le chargement de données à partir d'une source distante via une API .
  • componentWillUnmountest appelé juste avant que le composant ne soit démonté ou "démonté". Ceci est couramment utilisé pour supprimer les dépendances exigeantes en ressources du composant qui ne seront pas simplement supprimées lors du démontage du composant (par exemple, suppression de toutes les setInterval()instances liées au composant ou d'un " eventListener " défini sur le " document " car de la présence du composant)
  • renderest la méthode de cycle de vie la plus importante et la seule requise dans n'importe quel composant. Il est généralement appelé chaque fois que l'état du composant est mis à jour, ce qui doit être reflété dans l'interface utilisateur.

JSX

JSX, ou JavaScript XML , est une extension de la syntaxe du langage JavaScript. D'apparence similaire à HTML, JSX fournit un moyen de structurer le rendu des composants à l'aide d'une syntaxe familière à de nombreux développeurs. Les composants React sont généralement écrits à l'aide de JSX, bien qu'ils ne soient pas obligés de l'être (les composants peuvent également être écrits en JavaScript pur). JSX est similaire à une autre syntaxe d'extension créée par Facebook pour PHP appelée XHP .

Un exemple de code JSX :

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

Architecture au-delà du HTML

L'architecture de base de React s'applique au-delà du rendu HTML dans le navigateur. Par exemple, Facebook a des graphiques dynamiques qui s'affichent sous forme de <canvas>balises, et Netflix et PayPal utilisent le chargement universel pour afficher un code HTML identique à la fois sur le serveur et sur le client.

Réagissez aux crochets

Les hooks sont des fonctions qui permettent aux développeurs de "s'accrocher" aux fonctionnalités d'état et de cycle de vie de React à partir des composants de fonction. Les hooks ne fonctionnent pas à l'intérieur des classes - ils vous permettent d'utiliser React sans classes.

React fournit quelques crochets internes comme useState, useContext, useReducer, useMemoet useEffect. D'autres sont documentés dans la référence de l'API Hooks. useState, useReduceret useEffect, qui sont les plus utilisés, sont respectivement pour contrôler les effets d'état et secondaires.

Règles de crochets

Il existe des règles de hooks qui décrivent le modèle de code caractéristique sur lequel les hooks s'appuient. C'est la façon moderne de gérer l'état avec React.

  1. Les hooks ne doivent être appelés qu'au niveau supérieur (pas à l'intérieur des boucles ou des instructions if).
  2. Les hooks ne doivent être appelés qu'à partir de composants de fonction React, pas de fonctions normales ou de composants de classe

Bien que ces règles ne puissent pas être appliquées au moment de l'exécution, les outils d'analyse de code tels que les linters peuvent être configurés pour détecter de nombreuses erreurs au cours du développement. Les règles s'appliquent à la fois à l'utilisation des hooks et à l'implémentation de hooks personnalisés, qui peuvent appeler d'autres hooks.

idiomes communs

React n'essaie pas de fournir une "bibliothèque d'applications" complète. Il est conçu spécifiquement pour créer des interfaces utilisateur et n'inclut donc pas la plupart des outils que certains développeurs pourraient considérer comme nécessaires pour créer une application. Cela permet de choisir les bibliothèques que le développeur préfère pour accomplir des tâches telles que l'accès au réseau ou le stockage de données local. Des modèles communs d'utilisation ont émergé au fur et à mesure que la bibliothèque mûrit.

Flux de données unidirectionnel

Pour prendre en charge le concept de flux de données unidirectionnel de React (qui pourrait être contrasté avec le flux bidirectionnel d' AngularJS ), l'architecture Flux a été développée comme alternative à l' architecture modèle-vue-contrôleur populaire . Flux propose des actions qui sont envoyées via un répartiteur central à un magasin , et les modifications apportées au magasin sont répercutées dans la vue. Lorsqu'il est utilisé avec React, cette propagation est accomplie via les propriétés des composants. Depuis sa conception, Flux a été supplanté par des bibliothèques telles que Redux et MobX.

Le flux peut être considéré comme une variante du modèle d'observateur .

Un composant React sous l'architecture Flux ne doit pas modifier directement les accessoires qui lui sont transmis, mais doit recevoir des fonctions de rappel qui créent des actions qui sont envoyées par le répartiteur pour modifier le magasin. L'action est un objet dont la responsabilité est de décrire ce qui s'est passé : par exemple, une action décrivant un utilisateur "suivant" un autre peut contenir un identifiant d'utilisateur, un identifiant d'utilisateur cible et le type USER_FOLLOWED_ANOTHER_USER. Les magasins, qui peuvent être considérés comme des modèles, peuvent se modifier en réponse aux actions reçues du répartiteur.

Ce modèle est parfois exprimé comme « les propriétés descendent, les actions montent ». De nombreuses implémentations de Flux ont été créées depuis sa création, la plus connue étant peut-être Redux , qui propose un magasin unique, souvent appelé source unique de vérité .

Développement futur

L'état du projet peut être suivi via le forum de discussion de l'équipe principale. Cependant, les modifications majeures apportées à React passent par les problèmes du référentiel Future of React et les demandes d'extraction . Cela permet à la communauté React de fournir des commentaires sur les nouvelles fonctionnalités potentielles, les API expérimentales et les améliorations de la syntaxe JavaScript.

Histoire

React a été créé par Jordan Walke, un ingénieur logiciel chez Facebook, qui a publié un premier prototype de React appelé "FaxJS". Il a été influencé par XHP , une bibliothèque de composants HTML pour PHP . Il a été déployé pour la première fois sur le fil d' actualités de Facebook en 2011, puis sur Instagram en 2012. Il a été diffusé en open source à JSConf US en mai 2013.

React Native , qui permet le développement natif Android , iOS et UWP avec React, a été annoncé lors de la conférence React de Facebook en février 2015 et open source en mars 2015.

Le 18 avril 2017, Facebook a annoncé React Fiber, un nouvel ensemble d'algorithmes internes pour le rendu, par opposition à l'ancien algorithme de rendu de React, Stack. React Fiber devait devenir la base de toutes les améliorations futures et du développement de fonctionnalités de la bibliothèque React. La syntaxe réelle pour la programmation avec React ne change pas ; seule la façon dont la syntaxe est exécutée a changé. L'ancien système de rendu de React, Stack, a été développé à une époque où l'accent du système sur le changement dynamique n'était pas compris. Stack était lent à dessiner une animation complexe, par exemple, essayant de tout accomplir en un seul morceau. La fibre décompose l'animation en segments pouvant être répartis sur plusieurs images. De même, la structure d'une page peut être divisée en segments qui peuvent être maintenus et mis à jour séparément. Les fonctions JavaScript et les objets DOM virtuels sont appelés "fibres", et chacun peut être utilisé et mis à jour séparément, permettant un rendu plus fluide à l'écran.

Le 26 septembre 2017, React 16.0 a été rendu public.

Le 16 février 2019, React 16.8 a été rendu public. La version a introduit React Hooks.

Le 10 août 2020, l'équipe React a annoncé la première version candidate de React v17.0, notable comme la première version majeure sans modifications majeures de l'API React destinée aux développeurs.

Versions
Version Date de sortie Changements
0.3.0 29 mai 2013 Diffusion publique initiale
0.4.0 20 juillet 2013 Prise en charge des nœuds de commentaires <div>{/* */}</div>, API de rendu côté serveur améliorées, React.autoBind supprimé, Prise en charge de l'accessoire clé, Améliorations des formulaires, Correction de bugs.
0.5.0 20 octobre 2013 Amélioration de l'utilisation de la mémoire, prise en charge des événements de sélection et de composition, prise en charge de getInitialState et getDefaultProps dans les mixins, ajout de React.version et React.isValidClass, compatibilité améliorée pour Windows.
0.8.0 20 décembre 2013 Ajout du support pour les lignes et, Defer & Col. async, boucle pour <audio>& <video>, les attributs de correction automatique. Ajout d'événements onContextMenu, d'outils jstransform et esprima-fb mis à niveau, navigateur mis à niveau.
0.9.0 20 février 2014 Ajout de la prise en charge de crossOrigin, download et hrefLang, mediaGroup et muted, sandbox, seamless et srcDoc, attributs de portée, Ajout de any, arrayOf, component, oneOfType, renderable, shape to React.PropTypes, Ajout de la prise en charge des événements onMouseOver et onMouseOut, Ajout de la prise en charge pour onLoad et onError sur les <img>éléments.
0.10.0 21 mars 2014 Ajout de la prise en charge des attributs srcSet et textAnchor, ajout d'une fonction de mise à jour pour les données immuables, assurez-vous que tous les éléments void n'insèrent pas de balise de fermeture.
0,11.0 17 juillet 2014 Prise en charge SVG améliorée, événement e.view normalisé, commande Update $apply, prise en charge supplémentaire des espaces de noms, ajout d'une nouvelle API transformWithDetails, inclut des packages pré-construits sous dist/, MyComponent() renvoie désormais un descripteur, pas une instance.
0,12,0 21 novembre 2014 Ajout de nouvelles fonctionnalités L'opérateur Spread ({...}) introduit pour déprécier this.transferPropsTo, Ajout de la prise en charge de acceptCharset, classID, des attributs HTML manifestes, React.addons.batchedUpdates ajouté à l'API, @jsx React.DOM n'est plus requis, Problèmes résolus avec les transitions CSS.
0.13.0 10 mars 2015 Les modèles obsolètes qui avertissaient en 0.12 ne fonctionnent plus, l'ordre de résolution des références a changé, Propriétés supprimées this._pendingState et this._rootNodeID, Prise en charge des classes ES6, Ajout de l'API React.findDOMNode (composant), Prise en charge des itérateurs et des séquences immutable-js, Ajout d'un nouveau comprend React.addons.createFragment, déconseillé React.addons.classSet.
0.14.1 29 octobre 2015 Ajout de la prise en charge de srcLang, des attributs par défaut, de type et de l'attribut de couleur, accès garanti aux .props hérités sur les nœuds DOM, correction de scryRenderedDOMComponentsWithClass, ajout de react-dom.js.
15.0.0 7 avril 2016 Le rendu initial utilise désormais document.createElement au lieu de générer du HTML, Plus de <span>s supplémentaires , Prise en charge SVG améliorée, ReactPerf.getLastMeasurements()est opaque, Nouvelles dépréciations introduites avec un avertissement, Correction de plusieurs petites fuites de mémoire, React DOM prend désormais en charge les attributs HTML cite et profile et cssFloat, Propriétés CSS gridRow et gridColumn.
15.1.0 20 mai 2016 Correction d'un bogue de traitement par lots, Assurer l'utilisation de la dernière assignation d'objet, Correction de la régression, Supprimer l'utilisation de l'utilitaire de fusion, Renommer certains modules.
15.2.0 1 juillet 2016 Incluez les informations sur la pile de composants, arrêtez de valider les accessoires au moment du montage, ajoutez React.PropTypes.symbol, ajoutez la gestion onLoad à <link>et la gestion onError à l' <source>élément, ajoutez une isRunning()API, corrigez la régression des performances.
15.3.0 30 juillet 2016 Ajouter React.PureComponent, résoudre le problème avec le rendu du serveur imbriqué, ajouter xmlns, xmlnsXlink pour prendre en charge les attributs SVG et referrerPolicy aux attributs HTML, mettre à jour le module complémentaire React Perf, résoudre le problème avec la réf.
15.3.1 19 août 2016 Améliorer les performances des versions de développement, nettoyer les hooks internes, mettre à niveau les fbjs, améliorer le temps de démarrage de React, corriger la fuite de mémoire dans le rendu du serveur, corriger le rendu de test de React, changer l'invariant trackedTouchCount en console.error.
15.4.0 16 novembre 2016 Le package React et la version du navigateur n'incluent plus le DOM React, les performances de développement améliorées, les échecs de test occasionnels corrigés, la mise à jour de l'API batchedUpdates, React Perf et ReactTestRenderer.create().
15.4.1 23 novembre 2016 Restructurer l'affectation des variables, Correction de la gestion des événements, Correction de la compatibilité de la construction du navigateur avec les environnements AMD.
15.4.2 6 janvier 2017 Problèmes de construction corrigés, ajout de dépendances de package manquantes, messages d'erreur améliorés.
15.5.0 7 avril 2017 Ajout de react-dom/test-utils, Suppression des peerDependencies, Correction d'un problème avec Closure Compiler, Ajout d'un avertissement de dépréciation pour React.createClass et React.PropTypes, Correction d'un bug Chrome.
15.5.4 11 avril 2017 Correction de la compatibilité avec Enzyme en exposant batchedUpdates sur un moteur de rendu superficiel, mise à jour de la version des types d'accessoires, correction du package react-addons-create-fragment pour inclure la transformation loose-envify.
15.6.0 13 juin 2017 Ajout de la prise en charge des variables CSS dans l'attribut de style et les propriétés de style Grid, Correction de la prise en charge d'AMD pour les addons en fonction de la réaction, Suppression des dépendances inutiles, Ajout d'un avertissement de dépréciation pour les assistants d'usine React.createClass et React.DOM.
16.0.0 26 septembre 2017 Amélioration de la gestion des erreurs avec l'introduction de "limites d'erreur", React DOM permet de transmettre des attributs non standard, des modifications mineures du comportement de setState, la suppression de la build react-with-addons.js, l'ajout de React.createClass en tant que create-react-class, React.PropTypes en tant que prop-types, React.DOM en tant que react-dom-factories, modifie le comportement des méthodes de planification et de cycle de vie.
16.1.0 9 novembre 2017 Arrêt des versions Bower, correction d'une variable globale supplémentaire accidentelle dans les builds UMD, correction du déclenchement onMouseEnter et onMouseLeave, correction de l'espace réservé <textarea>, suppression du code inutilisé, ajout d'une dépendance package.json manquante, ajout de la prise en charge de React DevTools.
16.3.0 29 mars 2018 Ajouter une nouvelle API de contexte officiellement prise en charge, Ajouter un nouveau package Empêcher une boucle infinie lors de la tentative de rendu de portails avec SSR, Résoudre un problème avec this.state, Résoudre un problème IE/Edge.
16.3.1 3 avril 2018 Préfixer l'API privée, corriger les bugs de régression des performances et de gestion des erreurs en mode développement, ajouter une dépendance aux pairs, corriger un faux avertissement positif dans IE11 lors de l'utilisation de Fragment.
16.3.2 16 avril 2018 Correction d'un plantage d'IE, Correction des étiquettes dans les mesures de synchronisation des utilisateurs, Ajout d'une version UMD, Amélioration des performances de l'API unstable_observedBits avec l'imbrication.
16.4.0 24 mai 2018 Ajout de la prise en charge de la spécification des événements de pointeur, Ajout de la possibilité de spécifier des propTypes, Correction du contexte de lecture, Correction de la getDerivedStateFromProps()prise en charge, Correction d'un crash testInstance.parent, Ajout du composant React.unstable_Profiler pour mesurer les performances, Modification des noms d'événements internes.
16.5.0 5 septembre 2018 Ajoutez la prise en charge de React DevTools Profiler, gérez les erreurs dans davantage de cas extrêmes, ajoutez un réact-dom/profilage, ajoutez un événement onAuxClick pour les navigateurs, ajoutez des champs movementX et movementY aux événements de souris, ajoutez des champs de pression tangentielle et de torsion à l'événement de pointeur.
16.6.0 23 octobre 2018 Ajout de la prise en charge de contextType, Prise en charge des niveaux de priorité, des continuations et des rappels encapsulés, Amélioration du mécanisme de secours, Correction de la superposition grise sur iOS Safari, Ajout React.lazy()des composants de fractionnement de code.
16.7.0 20 décembre 2018 Correction des performances de React.lazy pour les composants chargés paresseusement, Effacer les champs au démontage pour éviter les fuites de mémoire, Correction d'un bug avec SSR, Correction d'une régression des performances.
16.8.0 6 février 2019 Ajouter des crochets, ajouter ReactTestRenderer.act()et ReactTestUtils.act()pour les mises à jour par lots, prendre en charge les paramètres synchrones passés à React.lazy(), améliorer l'API d'initialisation paresseuse useReducer Hook.
16.8.6 27 mars 2019 Correction d'un renflouement incorrect dans useReducer(), Correction des avertissements iframe dans Safari DevTools, Avertir si contextType est défini sur Context.Consumer au lieu de Context, Avertir si contextType est défini sur des valeurs invalides.
16.9.0 9 août 2019 Ajoutez l' API React.Profiler pour collecter des mesures de performances par programmation. Supprimer unstable_ConcurrentMode en faveur de unstable_createRoot
16.10.0 27 septembre 2019 Correction d'un cas particulier où une mise à jour de hook n'était pas mémorisée. Correction de l'heuristique pour déterminer quand s'hydrater, afin de ne pas s'hydrater de manière incorrecte lors d'une mise à jour. Effacez les champs de fibre supplémentaires lors du démontage pour économiser de la mémoire. Correction d'un bug avec les champs de texte obligatoires dans Firefox. Préférez Object.is au lieu de polyfill en ligne, lorsqu'il est disponible. Correction d'un bug lors du mélange de Suspense et de la gestion des erreurs.
16.10.1 28 septembre 2019 Correction de la régression dans les applications Next.js en permettant à l'incompatibilité Suspense pendant l'hydratation de se poursuivre en silence
16.10.2 3 octobre 2019 Correction de la régression dans react-native-web en restaurant l'ordre des arguments dans les extracteurs de plugins d'événements
16.11.0 22 octobre 2019 Correction des gestionnaires mouseenter de tirer deux fois à l'intérieur des conteneurs React imbriqués. Supprimez les API expérimentales unstable_createRoot et unstable_createSyncRoot. (Ceux-ci sont disponibles dans le canal expérimental en tant que createRoot et createSyncRoot.)
16.12.0 14 novembre 2019 React DOM - Corrige les effets passifs ( useEffect) qui ne sont pas déclenchés dans une application multi-racine.

React Is - Correction lazyet memotypes d'éléments considérés au lieu de composants

16.13.0 26 février 2020 Fonctionnalités ajoutées en mode React Concurrent.

Correction des régressions dans la bibliothèque principale de React et React Dom.

16.13.1 19 mars 2020 Correction d'un bug dans le mode hérité Suspense.

Rétablir l'avertissement pour les mises à jour inter-composants qui se produisent dans les cycles de vie de rendu de classe

16.14.0 14 octobre 2020 Ajout de la prise en charge de la nouvelle transformation JSX.
17.0.0 20 octobre 2020 "Aucune nouvelle fonctionnalité" permet des mises à jour progressives de React à partir d'anciennes versions.

Ajouter une nouvelle transformation JSX, des modifications à la délégation d'événements

17.0.1 22 octobre 2020 React DOM - Corrige un plantage dans IE11
17.0.2 22 mars 2021 React DOM - Supprimez une dépendance inutilisée pour traiter l' SharedArrayBufferavertissement d'isolement d'origine croisée.

Licence

La version publique initiale de React en mai 2013 utilisait la licence Apache 2.0 . En octobre 2014, React 0.12.0 l'a remplacé par la licence BSD à 3 clauses et a ajouté un fichier texte BREVETS distinct qui permet l'utilisation de tous les brevets Facebook liés au logiciel :

La licence accordée en vertu des présentes prendra fin, automatiquement et sans préavis, pour toute personne faisant une réclamation (y compris en déposant une action en justice, une affirmation ou toute autre action) alléguant (a) une contrefaçon directe, indirecte ou contributive ou une incitation à contrefaire un brevet : (i ) par Facebook ou l'une de ses filiales ou sociétés affiliées, que cette réclamation soit ou non liée au Logiciel, (ii) par toute partie si une telle réclamation découle en tout ou en partie de tout logiciel, produit ou service de Facebook ou de l'un de ses filiales ou sociétés affiliées, que cette réclamation soit ou non liée au Logiciel, ou (iii) par toute partie liée au Logiciel ; ou (b) que tout droit sur une revendication de brevet de Facebook est invalide ou inapplicable.

Cette clause non conventionnelle a suscité des controverses et des débats au sein de la communauté des utilisateurs de React, car elle pourrait être interprétée comme permettant à Facebook de révoquer la licence dans de nombreux scénarios, par exemple, si Facebook poursuit le titulaire de la licence en l'incitant à prendre "d'autres mesures" en publiant l'action. sur un blog ou ailleurs. Beaucoup ont exprimé la crainte que Facebook puisse exploiter injustement la clause de résiliation ou que l'intégration de React dans un produit ne complique l'acquisition future d'une start-up.

Sur la base des commentaires de la communauté, Facebook a mis à jour la délivrance du brevet en avril 2015 pour qu'elle soit moins ambiguë et plus permissive :

La licence accordée en vertu des présentes prendra fin, automatiquement et sans préavis, si vous (ou l'une de vos filiales, sociétés affiliées ou agents) initiez directement ou indirectement, ou prenez un intérêt financier direct dans, toute Affirmation de brevet : (i) contre Facebook ou tout autre de ses filiales ou sociétés affiliées, (ii) contre toute partie si une telle revendication de brevet découle en tout ou en partie de tout logiciel, technologie, produit ou service de Facebook ou de l'une de ses filiales ou sociétés affiliées, ou (iii) contre toute partie relatives au Logiciel. [...] Une « affirmation de brevet » est toute action en justice ou autre action alléguant une contrefaçon directe, indirecte ou contributive ou une incitation à enfreindre un brevet, y compris une demande reconventionnelle ou reconventionnelle.

L' Apache Software Foundation a considéré que cet accord de licence était incompatible avec ses politiques de licence, car il "transfère le risque aux consommateurs en aval de notre logiciel en faveur du concédant de licence, et non du licencié, violant ainsi notre politique légale Apache d'être un donateur universel ", et "ne sont pas un sous-ensemble de ceux trouvés dans [Apache License 2.0], et ils ne peuvent pas être sous-licenciés en tant que [Apache License 2.0]". En août 2017, Facebook a rejeté les préoccupations en aval de la Fondation Apache et a refusé de reconsidérer sa licence. Le mois suivant, WordPress a décidé d'éloigner ses projets Gutenberg et Calypso de React.

Le 23 septembre 2017, Facebook a annoncé que la semaine suivante, il re-licencierait Flow, Jest , React et Immutable.js sous une licence MIT standard ; la société a déclaré que React était « le fondement d'un vaste écosystème de logiciels open source pour le Web », et qu'ils ne voulaient pas « retarder les progrès pour des raisons non techniques ».

Le 26 septembre 2017, React 16.0.0 est sorti avec la licence MIT. Le changement de licence MIT a également été rétroporté vers la ligne de version 15.x avec React 15.6.2.

Voir également

Les références

Liens externes