React v15.5.0
Ça fait exactement un an depuis le dernier changement de version majeure de React. Notre prochaine version majeure, React 16, comprendra des améliorations passionnantes, dont une réécriture complète des mécanismes internes de React. Nous prenons la stabilité au sérieux, et nous engageons à apporter ces améliorations à tous nos utilisateurs sans qu’ils aient trop d’efforts à fournir.
C’est pourquoi nous publions aujourd’hui React 15.5.0.
Nouveaux avertissements de dépréciation
Le changement le plus important d’abord : nous avons extrait React.PropTypes
et React.createClass
dans leurs propres modules. Les deux sont encore accessibles via l’objet principal React
, mais l’utilisation de l’un ou l’autre produira un avertissement d’obsolescence dans la console en mode développement. Ça permettra d’optimiser la taille du code à l’avenir.
Ces avertissements n’affecteront pas le comportement de votre application. Cependant, nous sommes conscients qu’ils peuvent causer des frustrations, en particulier si vous utilisez un framework de test qui traite console.error
comme un échec.
Nous n’ajoutons pas de nouveaux avertissements à la légère. Les avertissements dans React ne sont pas de simples suggestions—ils font partie intégrante de notre stratégie visant à garder le plus de personnes possible sur la dernière version de React. Nous n’ajoutons jamais d’avertissements sans fournir un mécanisme incrémentiel de mise à niveau.
Ainsi, bien que les avertissements puissent causer de la frustration à court terme, nous croyons que le fait d’inciter les développeurs à migrer leurs bases de code maintenant évite une plus grande frustration par la suite. La correction proactive des avertissements vous assure d’être prêt·e pour la prochaine version majeure. Si votre application ne produit aucun avertissement en 15.5, elle devrait continuer à fonctionner en 16 sans aucun changement supplémentaire.
Pour chacune de ces nouvelles dépréciations, nous avons fourni un codemod pour migrer automatiquement votre code. Ils sont disponibles au sein du projet react-codemod.
Cesser d’utiliser React.PropTypes
Les Prop Types permettent la validation des props des composants à l’exécution durant la phase de développement. Nous avons extrait les validateurs prédéfinis pour les placer dans un module séparé car tout le monde ne les utilise pas forcément.
En 15.5, au lieu d’accéder à PropTypes
depuis l’objet principal React
, installez le module prop-types
et importez-les de là :
// Avant (15.4 et versions précédentes)
import React from 'react';
class Component extends React.Component {
render() {
return <div>{this.props.text}</div>;
}
}
Component.propTypes = {
text: React.PropTypes.string.isRequired,}
// Après (15.5)
import React from 'react';
import PropTypes from 'prop-types';
class Component extends React.Component {
render() {
return <div>{this.props.text}</div>;
}
}
Component.propTypes = {
text: PropTypes.string.isRequired,};
Le codemod pour cette modification effectue cette conversion automatiquement. Voici un exemple de son utilisation de base :
jscodeshift -t react-codemod/transforms/React-PropTypes-to-prop-types.js <path>
Les API propTypes
, contextTypes
et childContextTypes
fonctionneront exactement comme avant. Le seul changement réside dans le déplacement des validateurs intégrés vers un module séparé.
Vous pouvez également utiliser Flow pour vérifier statiquement votre code JavaScript, y compris les composants React.
Cesser d’utiliser React.createClass
Quand React a été initialement publié, il n’y avait pas de moyen idiomatique de créer des classes en JavaScript, nous avons donc fourni le nôtre : React.createClass
.
Plus tard, des classes ont été ajoutées au langage dans le cadre de ES2015, nous avons donc ajouté la possibilité de créer des composants React en utilisant des classes JavaScript. Avec les fonctions composants, les classes JavaScript sont désormais la façon recommandée de créer des composants en React.
Pour vos composants createClass
existants, nous vous recommandons de les migrer vers des classes JavaScript. Cependant, si vous avez des composants qui utilisent des mixins, la conversion en classes peut ne pas être immédiatement réalisable. Pour ce genre de cas, create-react-class
est disponible sur npm afin de préserver cette fonctionnalité :
// Avant (15.4 et précédentes)
var React = require('react');
var Component = React.createClass({ mixins: [MixinA],
render() {
return <Child />;
}
});
// Après (15.5)
var React = require('react');
var createReactClass = require('create-react-class');
var Component = createReactClass({ mixins: [MixinA],
render() {
return <Child />;
}
});
Vos composants continueront à fonctionner de la même manière qu’auparavant.
Le codemod pour ce changement tente de convertir un composant createClass
en une classe JavaScript, avec un repli vers create-react-class
si nécessaire. Il a converti des milliers de composants en interne sur Facebook.
Utilisation de base :
jscodeshift -t react-codemod/transforms/class.js path/to/components
Arrêt de la prise en charge des Addons React
Nous cessons de maintenir activement les modules React Addons. En vérité, la plupart de ces paquets n’étaient plus activement maintenus depuis longtemps. Ils continueront à fonctionner, mais nous vous recommandons de migrer le plus tôt possible afin d’éviter de futures cassures.
- react-addons-create-fragment - Les fragments feront partie intégrante de React 16, à partir de quoi ce module ne sera plus nécessaire. Nous recommandons d’utiliser plutôt des tableaux d’éléments avec des clés.
- react-addons-css-transition-group - Utilisez plutôt react-transition-group/CSSTransitionGroup. La version 1.1.1 offre un remplacement facile.
- react-addons-linked-state-mixin - Définissez plutôt explicitement les props de
value
et de gestionnaireonChange
. - react-addons-pure-render-mixin - Utilisez plutôt
React.PureComponent
. - react-addons-shallow-compare - Utilisez plutôt
React.PureComponent
. - react-addons-transition-group - Utilisez plutôt react-transition-group/TransitionGroup. La version 1.1.1 offre un remplacement facile.
- react-addons-update - Utilisez plutôt immutability-helper, qui offre un remplacement facile.
- react-linked-input - Définissez plutôt explicitement
value
et le gestionnaireonChange
.
Nous cessons également de prendre en charge la version UMD de react-with-addons
. Elle sera retirée de React 16.
Les utilitaires de test de React
Actuellement, les utilitaires de test de React sont mis à disposition par react-addons-test-utils
. À partir de la version 15.5, nous déprécions ce module et les déplaçons dans react-dom/test-utils
:
// Avant (15.4 et précédentes)
import TestUtils from 'react-addons-test-utils';
// Après (15.5)
import TestUtils from 'react-dom/test-utils';
Ça montre que ce que nous appelons les utilitaires de test sont en réalité un ensemble d’API qui enrobent le moteur de rendu DOM.
Le rendu superficiel constitue une exception, car il n’est pas spécifique au DOM. Le moteur de rendu superficiel a été déplacé vers react-test-renderer/shallow
.
// Avant (15.4 et précédentes)
import { createRenderer } from 'react-addons-test-utils';
// Après (15.5)
import { createRenderer } from 'react-test-renderer/shallow';
Remerciements
Nous aimerions adresser un remerciement spécial à ces quelques personnes pour le transfert de propriété des noms de modules npm :
Installation
Nous conseillons d’utiliser Yarn ou npm pour gérer les dépendances front-end. Si vous débutez avec les gestionnaires de paquets, la documentation de Yarn constitue un bon endroit pour commencer.
Pour installer React avec Yarn, exécutez :
yarn add react@^15.5.0 react-dom@^15.5.0
Pour installer React avec npm, exécutez :
npm install --save react@^15.5.0 react-dom@^15.5.0
Nous vous conseillons par ailleurs d’utiliser un bundler comme webpack ou Browserify afin de pouvoir écrire du code modulaire et le regrouper en petits paquets pour optimiser le temps de chargement.
Souvenez-vous que par défaut, React exécute des vérifications supplémentaires et fournit des avertissements utiles en mode développement. Lorsque vous déployez votre application, assurez-vous de la compiler en mode production.
Si vous n’utilisez pas de bundler, nous fournissons également des bundles pré-construits dans les paquets npm que vous pouvez inclure via des balises de script sur votre page :
- React Build de développement avec les avertissements : react/dist/react.js Build minifié pour la production : react/dist/react.min.js
- React with Add-Ons Build de développement avec les avertissements : react/dist/react-with-addons.js Build minifié pour la production : react/dist/react-with-addons.min.js
- React DOM (inclure React dans la page avant React DOM) Build de développement avec les avertissements : react-dom/dist/react-dom.js Build minifié pour la production : react-dom/dist/react-dom.min.js
- React DOM Server (inclure React dans la page avant React DOM Server) Build de développement avec les avertissements : react-dom/dist/react-dom-server.js Build minifié pour la production : react-dom/dist/react-dom-server.min.js
Nous avons également publié la version 15.5.0
des modules react
, react-dom
et addons sur npm et le paquet react
sur bower.
Changelog
15.5.0 (7 avril 2017)
React
- Ajout d’un avertissement de dépréciation pour
React.createClass
. Oriente désormais les utilisateurs vers create-react-class. (@acdlite dans d9a4fa4) - Ajout d’un avertissement de dépréciation pour
React.PropTypes
. Oriente désormais les utilisateurs vers prop-types. (@acdlite dans 043845c) - Correction d’un problème lors de l’utilisation de
ReactDOM
avecReactDOMServer
. (@wacii dans #9005) - Correction d’un problème avec le compilateur Closure. (@anmonteiro dans #8895)
- Une autre correction pour le compilateur Closure. (@Shastel dans #8882)
- Ajout d’informations de pile de composants pour l’avertissement de type d’élément invalide. (@n3tr dans #8495)
React DOM
- Correction d’un bug Chrome lors de l’effacement arrière dans les champs de saisie numérique. (@nhunzaker dans #7359)
- Ajout de
react-dom/test-utils
, qui exporte les utilitaires de test de React. (@bvaughn)
React Test Renderer
- Correction d’un bug où
componentWillUnmount
n’était pas appelé pour les enfants (@gre dans #8512) - Ajout de
react-test-renderer/shallow
, qui exporte le moteur de rendu superficiel. (@bvaughn)
React Addons
- Dernière version pour les addons ; ils ne seront plus activement maintenus.
- Suppression de
peerDependencies
pour que les addons continuent à fonctionner indéfiniment. (@acdlite et @bvaughn dans 8a06cd7 dans 67a8db3) - Mise à jour pour supprimer les références à
React.createClass
etReact.PropTypes
(@acdlite dans 12a96b9) react-addons-test-utils
est obsolète. Utilisation dereact-dom/test-utils
etreact-test-renderer/shallow
à la place. (@bvaughn)