props Un composant ‘classe’ possède en plus : • un state • une méthode render • des méthodes liée à son cycle de vie : – componentDidMount – componentWillReceiveProps – etc.. 7 React Redux Optimisations Problèmes de perf. Quizz
state ‣ Le state est immutable ‣ reducers : fonctions pures pour MAJ le state 18 React Redux Optimisations Problèmes de perf. Quizz View Store Reducer Actions Actions
à jour Fonction pure → ne doit jamais : – Modifier directement ses arguments – Avoir des effets de bords – Appeler des fonctions impures 21 React Redux Optimisations Problèmes de perf. Quizz (previousState, action) → nextState
au state via getState() ‣ Permet la mise à jour du state via dispatch(action) ‣ Permet l’abonnement des composants via subscribe(listener) → composants notifiés lorsque le state subit une modification 24 React Redux Optimisations Problèmes de perf. Quizz
Presentational Components Props connect State Store Selectors Compute derived data from state Reducers dispatch Actions data & callback functions Update the state Props Container components Lifecycle hooks ex: ComponentWillMount = () => fetchData()
fonctionnent ‣ Sont souvent stateful et servent de sources de données ‣ “Dispatchent” les actions flux ‣ Transmettent des données et comportements aux “composant de pres”. via leur props ‣ Peuvent contenir des composants “présentation” et “container” • Ne contiennent jamais d’éléments du DOM ni de styles!! ‣ Peuvent être générés par connect() 28 React Redux Optimisations Problèmes de perf. Quizz source : https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.6oac6zpqz
choses” apparaissent sur l’interface ‣ Peuvent contenir des composants “présentation” et “container” • possèdent souvent des éléments du DOM et sont stylisés ‣ Indépendants du reste de l’application ‣ Ne spécifient pas la manière dont les données sont chargés ou modifiées ‣ Reçoivent les données et les callback exclusivement via leurs props ‣ Possède uniquement un state si celui-ci concerne l’UI (et non des data) ‣ Souvent écrits sous forme de fonctions 29 React Redux Optimisations Problèmes de perf. Quizz source : https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.6oac6zpqz
Quizz React.PureComponent is exactly like React.Component but implements shouldComponentUpdate() with a shallow prop and state comparison. “ ‒ Facebook https://facebook.github.io/react/docs/react-api.html#react.purecomponent
default function shallowEqual(objA, objB) { if (objA === objB) { return true } const keysA = Object.keys(objA) const keysB = Object.keys(objB) if (keysA.length !== keysB.length) { return false } // Test for A's keys different from B. const hasOwn = Object.prototype.hasOwnProperty for (let i = 0; i < keysA.length; i++) { if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) { return false } } return true } Comparaison superficielle objA et obj B Desfois qu’il y ait une propriété en moins ou en plus Comparaison des propriétés de A et B
Mak’er - Led Zeppelin More than a feeling - Boston Dire Strait - Sultans of Swing Alt-j - intro True Strength - John Dreamer True Strength - John Dreamer mp3 mp3 My music app mp3 mp3 mp3 mp3 TrackList TrackItem
dont ils ne sont pas concernés • Plus votre composant grossis et plus le risque augmente ‣ Ne passer à un composant seulement les informations utiles à ce composant ‣ Utiliser des sélecteurs mémoisés 51 React Redux Optimisations Problèmes de perf. Quizz