https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAttends, j'ai appris la POO à l'école, je croyais que c'était bien ?
- C'est parce que c'est ce que faisait Java avant d'être récupéré par Oracle. Je veux dire, la POO était bonne avant, et est toujours utile de nos jours, mais tout le monde a réalisé que modifier des états était pas top, donc maintenant tout le monde passe du côté des objets immuables et de la programmation fonctionnelle. Les gars utilisant Haskell en parlent depuis des années sans parler des gars de Elm. Heureusement dans le web d'aujourd'hui on a des bibliothèques comme Ramda qui permettent de la programmation fonctionnelle en JavaScript.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgEst-ce que tu chies juste un tas de nom pour faire joli ? C'est quoi ça, Ranma ?
- Non. Ramda. Comme Lambda. Tu sais la bibliothèque de David Chambers ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgDavid qui ?
- David Chambers. Un mec cool. Un des contributeurs de Ramda. Tu devrais aussi t'intéresser à...https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAttends, je vais t'arrêter là. Tout ça est peut-être cool, mais je pense que tout ç'est trop compliqué et inutile pour simplement faire de la récupération de données et les afficher. Je suis sûr que j'ai pas besoin de connaître ce David pour savoir créer des tableaux avec des données dynamiques. Revenons en à React. Comment je peux récupérer les données depuis le serveur avec React ?
- Et bien en fait, tu ne peux pas récupérer les données avec React, tu peux juste afficher les données avec React.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgT'es sérieux là ! Tout ça pour ça ? Alors on utilise quoi pour récupérer les données ?
- Tu utilises Fetch pour récupérer les données du serveur. C'est le nom de l'implémentation native pour faire du XMLHttpRequests sur un serveur.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAh, tu veux dire AJAX.
- AJAX est juste l'utilisation de XMLHttpRequests. Mais oui. Fetch te permet de faire de l'AJAX en te basant sur des Promesses, que tu peux utiliser pour éviter les cascades de fonctions de rappel.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgCascades de fonctions de rappel ?
- Oui. À chaque fois que tu fais une requête asynchrone au serveur, tu dois attendre la réponse, tu utilises donc une fonction dans une fonction, c'est ce qu'on appelle une fonction de rappel. Si tu as plusieurs appel, ça forme une cascade.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAh, et les Promesses ça empêche ça ?
- En effet. En manipulant tes fonctions de rappel dans des Promesses, tu peux lire ton code plus facilement et mieux le comprendre. Tu peux le simuler et le tester, avec des requêtes simultanées en attendant qu'elles soient toutes arrivées avant de continuer.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgEt ça peut être fait avec Fetch ?
- Oui, mais seulement si tes utilisateurs utilisent des navigateurs compatibles, sinon tu auras besoin d'un polyfill pour Fetch ou d'utiliser Request, bluebird ou axios.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgMais combien de bibliothèques je dois connaître bon sang !?
- Ça, c'est l'écosystème JavaScript de npm. Il y a des milliers de bibliothèques qui font toutes la même chose. Les sources des bibliothèques sont à disposition, et nous avons les meilleures !https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgC'est quoi ça alors Request, bluebird et axios ?
- Ce sont toutes des bibliothèques pour faire du XMLHttpRequests avec des Promesses.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgEt les méthodes AJAX de jQuery ne peuvent pas retourner des Promesses aussi ?
- On n'utilise plus la lettre « j » en 2020. Utilise juste Fetch, et les polyfill quand le navigateur ne l'a pas ou alors Request, bluebird et axios à la place. Ensuite gères tes Promesses avec les fonctions await et async et boom, tu as le contrôle de flux parfait.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgC'est la deuxième fois que tu me parles de await mais je sais pas trop ce que c'est.
- await permet de bloquer les appels asynchrones, te permettant d'avoir un meilleur contrôle sur « quand » les données vont être récupérées et en améliore la lisibilité du code. C'est génial, tu as juste besoin se t'assurer d'avoir la surcouche stage-3 avec Babel, ou d'utiliser la syntax-async-functions et le plugin transform-async-to-generator.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgC'est imbitable.
- Non, imbitable c'est le fait de devoir pré-compiler du code TypeScript et le transpiler avec Babel pour pouvoir utiliser des fonctionnalités qui ne sont pas encore supportées par TypeScript.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgJe sais pas trop quoi dire à ce stade.
- C'est très simple. Tu codes tout en TypeScript. Tous les modules sont récupérés avec Fetch et compilés en ES6. Tu les transpiles avec Babel et la surcouche stage-3, et tu charges ça avec SystemJS. Si tu n'as pas Fetch, utilise un polyfill ou utilise axios, et gère toutes tes Promesses avec await.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgOn a pas la même définition de « très simple ». Donc avec ce rituel je vais finalement pouvoir récupérer mes données et les afficher avec React pas vrai ?
- Et ton application ne devait pas gérer les changements d'états ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon ça va aller, on va juste ré-afficher les données à chaque fois.
- Bon d'accord. Parce que sinon j'aurais dû t'expliquer ce qu'était Flux, et ses implémentations comme dans Flummox, Alt ou Fluxible. Mais pour être honnête, tu devrais utiliser Redux.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgJe crois que je m'en tape un peu de tous ses noms, je veux juste afficher des données.
- Oh, si tu veux vraiment juste afficher des données, tu n'as peut être pas besoin de React pour commencer. Tu devrais plutôt utiliser un moteur de template.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgTu te fous de moi ? T'es encore sérieux là ? C'est comme ça que tu donnes des conseils ?
- Je vais juste t'expliquer ce que tu pourrais utiliser.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon arrête. Juste arrête.
- Je veux dire, même si tu utilises un moteur de template, tu pourras toujours utiliser TypeScript + SystemJS + Babel si tu veux, donc tout ça n'est pas perdu.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgJ'ai besoin d'afficher des données sur une page. Pas d'exécuter une Fatality Sub-Zero dans Mortal Kombat. Dit moi juste quel moteur de template utilisé à partir de maintenant.
- Il y en a un paquet. Attends, je vais essayer d'être plus attentif à ton parcours et d'être moins réduit qu'un simple React. Y a t-il, donc, un moteur de template avec lequel tu es plus familier ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgEt bien. Ça me parle un peu, ça, les templates, mais je n'arrive pas à me rappeler d'un nom. J'avais juste utilisé ça par curiosité.
- jTemplates ? jQote ? pure ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgÇa ne me dit rien. Un autre ?
- Transparency ? JsRender ? Markup.js ? Knockout ? Ce dernier permet la liaison de donnée bidirectionnelle.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon, d'autres ?
- Plates ? jQuery Templates plugin ? Handlebars ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAh... peut-être quelque chose comme le dernier ?
- Mustache ? Underscore.js ? Je pense aussi à lodash-template mais c'est assez 2014 quand même.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgAh... peut-être pas ça finalement.
- Jade ? Dust ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon.
- dotJS ? EJS ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon...
- Nunjucks ? ECT ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpg...Non...
- Hum... rien comme une syntaxe à la CoffeeScript alors. Jade ?https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png
https://image.noelshack.com/fichiers/2019/29/7/1563744576-67189887-1087394354783543-3550619467551604736-n.jpgNon, tu l'as déjà dit Jade.
- Je veux dire Pug. Je veux dire Jade. Je veux dire, Jade c'est maintenant Pug.https://image.noelshack.com/fichiers/2017/35/3/1504127862-cadre.png