00:00:00On a un nouveau framework JavaScript,
00:00:02un framework full stack,
00:00:04mais écoutez-moi avant d'abandonner.
00:00:06C'est plutôt intéressant parce que c'est fait par les gens de Remix,
00:00:11donc les personnes qui ont créé Remix JS,
00:00:13Ryan Florence et Michael Jackson.
00:00:16Non, pas ce Michael Jackson.
00:00:18Ce sont aussi les auteurs originaux de React Router.
00:00:21Ils ont partagé leur vision et en fait le premier prototype,
00:00:25on pourrait dire,
00:00:26ou les premières démos de leur tout nouveau framework JavaScript,
00:00:31Remix version 3.
00:00:32Donc ce n'est pas vraiment un nouveau nom,
00:00:34c'est un nom existant,
00:00:36mais c'est un framework entièrement nouveau.
00:00:39Et dans cette vidéo,
00:00:40je vais essayer de donner du sens à tout ça.
00:00:43Je vais expliquer ce que c'est et bien sûr quel est mon avis là-dessus,
00:00:48si on a vraiment besoin d'un autre framework JavaScript et quelles sont selon moi ses chances de succès ou d'adoption,
00:00:56maintenant à une époque où les grands modèles de langage crachent bien sûr des applications React par défaut.
00:01:03Mais allons-y étape par étape.
00:01:05Qu'est-ce que Remix exactement et pourquoi est-ce important ??
00:01:11Remix,
00:01:11au cas où vous l'auriez manqué,
00:01:13est un méta-framework React,
00:01:15en fin de compte une alternative à Next.js.
00:01:18Et Remix a été lancé il y a déjà quelques années.
00:01:21Remix version 2 est sorti,
00:01:23je pense,
00:01:24en 2022 si je ne me trompe pas complètement.
00:01:26Et puis en 2024,
00:01:28Remix version 2 a été essentiellement fusionné avec React Router.
00:01:32C'est pourquoi maintenant,
00:01:34quand on utilise React Router,
00:01:36on peut soit l'utiliser comme bibliothèque de routage dans les applications React comme on l'a toujours fait,
00:01:43ça marche toujours,
00:01:44c'est toujours une bibliothèque incroyable pour ça,
00:01:47mais on peut aussi l'utiliser en mode framework pour essentiellement créer une application React full stack où React Router est plus qu'un simple routeur,
00:01:57où il aide aussi avec la récupération de données,
00:02:01le chargement de données,
00:02:02les mutations de données,
00:02:04exactement comme Remix,
00:02:05parce que c'est Remix fusionné dans React Router.
00:02:08Mais ça a bien sûr soulevé la question de ce qui allait se passer avec Remix alors,
00:02:14avec la marque..
00:02:17Remix,
00:02:17et il s'avère qu'il va devenir un nouveau framework avec la version 3.
00:02:22Il va devenir un nouveau framework qui,
00:02:25important,
00:02:26est indépendant de React.
00:02:27Ce n'est pas un méta-framework React.
00:02:30Ce n'est pas une autre alternative à Next.js,
00:02:33pour ainsi dire.
00:02:34Au contraire,
00:02:35c'est un tout nouveau framework JavaScript full stack écrit de zéro,
00:02:40from scratch,
00:02:41avec toutes les fonctionnalités et l'API que Ryan Florence et Michael Jackson aimeraient avoir dans un nouveau framework JavaScript.
00:02:50Donc en gros,
00:02:51résoudre les problèmes qu'ils voient et ont vus avec l'écosystème JavaScript,
00:02:56avec le paysage existant de bibliothèques et de frameworks si vous voulez,
00:03:01spécifiquement bien sûr avec React puisque c'est la principale bibliothèque et framework,
00:03:07selon comment vous voulez l'appeler,
00:03:10que nous avons là-bas.
00:03:11Alors, de quoi s'agit-il ce nouveau Remix.
00:03:14Eh bien, vendredi dernier.?
00:03:18On a pu avoir une première démo, un premier aperçu de l'API.
00:03:21Et je mettrai le lien du live stream complet où vous pourrez regarder tout l'événement d'annonce en dessous de cette vidéo,
00:03:28bien sûr,
00:03:29au cas où vous voudriez tout voir.
00:03:31Mais soyez conscients du fait que ce sera environ quatre heures de démo et d'explication non-stop.
00:03:36Je les ai regardées pour que vous n'ayez pas à le faire si vous ne voulez pas,
00:03:41mais jetez-y définitivement un œil si vous voulez en savoir plus.
00:03:45Et ici vous voyez l'une des principales choses sur lesquelles ce nouveau....
00:03:49Framework sera centré,
00:03:51ou disons la principale chose qui a fait quelques vagues sur X.
00:03:55Ce dot update.
00:03:56Ça n'a pas l'air si spectaculaire, n'est-ce pas?
00:04:00Eh bien, ça implique en fait deux choses auxquelles....
00:04:04Les développeurs JavaScript ne sont plus vraiment habitués.
00:04:08A : l'utilisation du mot-clé this.
00:04:10Je veux dire,
00:04:11les vieux comme moi,
00:04:12on a appris toutes les bizarreries et fonctionnalités de this quand on a commencé avec JavaScript.
00:04:19De nos jours, on ne l'utilise plus vraiment beaucoup.
00:04:22Dans React, vous n'écrirez probablement jamais this.
00:04:26Mais c'est un mot-clé intégré à JavaScript.
00:04:28Ils exploitent ce mot-clé this pour vous exposer certaines API.
00:04:33Où obtenez-vous l'accès à ces API?
00:04:35Eh bien, vous écrivez toujours des fonctions..
00:04:39Donc vous n'écrivez pas de classes même si vous pourriez penser que vous le faites avec ce mot-clé.
00:04:44Mais quand vous travaillez avec Remix,
00:04:46vous construisez toujours des composants,
00:04:48et vous utiliserez toujours des fonctions pour ça.
00:04:51Donc exactement comme vous le connaissez avec React,
00:04:54mais ces fonctions de composant auront l'air un peu différentes.
00:04:57Mais revenons à this dot update.
00:04:59J'ai mentionné qu'il y a deux choses importantes à ce sujet.
00:05:02This en est une.
00:05:03Update est l'autre,
00:05:04parce que dans Remix version 3,
00:05:05vous devrez dire au framework quand il doit mettre à jour l'écran,
00:05:09quand il doit faire un re-render.
00:05:11Et c'est bien sûr quelque chose auquel nous ne sommes plus habitués,
00:05:14parce que dans React,
00:05:15mais aussi dans Vue et Angular,
00:05:17vous comptez sur le framework pour déterminer pour vous quand mettre à jour.
00:05:21Dans React,
00:05:22quand vous appelez setState,
00:05:23vous assignez une nouvelle valeur à l'état que vous gérez et ça déclenchera aussi une mise à jour de l'interface.
00:05:29Mais pas nécessairement instantanément.
00:05:31Au lieu de ça,
00:05:32React fera du batching,
00:05:33collectera potentiellement plusieurs mises à jour d'état et ainsi de suite,
00:05:37mais finalement il mettra à jour l'interface.
00:05:40Donc avec setState,
00:05:41vous dites en quelque sorte à React qu'il devrait mettre à jour l'interface,
00:05:45mais vous lui dites surtout qu'une valeur change et que c'est un effet de ça que l'interface sera mise à jour,
00:05:51que l'interface sera re-rendue.
00:05:52Avec Remix, c'est différent.
00:05:54Avec la version 3 de Remix, je devrais dire.
00:05:56Là,
00:05:57vous gérerez votre état dans des variables standard,
00:06:00rien de spécial.
00:06:01Il n'y a pas de hook useState ou quoi que ce soit comme ça.
00:06:04Il n'y a pas de hooks du tout en fait.
00:06:06Et vous appelez juste this dot update chaque fois que vous savez que l'interface devrait se mettre à jour.
00:06:11Donc vous pouvez changer plein de variables et ne pas appeler this update et l'interface ne sera pas mise à jour.
00:06:17Ou vous changez plein de variables et vous appelez this dot update et l'interface se mettra à jour.
00:06:23C'est comme ça que ça marchera,
00:06:24et il semble que quelques personnes,
00:06:26vous connaissez bien Internet,
00:06:28les gens sur Internet,
00:06:29ils sont horribles,
00:06:30quelques personnes ont quelques problèmes avec ça.
00:06:33Je dirais, voyons comment ça marche.
00:06:35Je veux dire,
00:06:35c'est une nouvelle approche et l'ancienne approche fonctionne définitivement bien.
00:06:40Je suppose qu'il y a une raison pour laquelle elle est utilisée dans toutes ces bibliothèques et frameworks,
00:06:46mais l'ancienne approche a définitivement aussi le potentiel d'être un piège qui peut mener à des situations où ce n'est pas vraiment clair pourquoi quelque chose se met à jour ou ne se met pas à jour.
00:06:56Et dans des applications plus complexes et surtout avec des versions plus récentes de React qui sont devenues assez complexes avec beaucoup de hooks et tout,
00:07:05ça peut être écrasant de vraiment comprendre ce qui se passe.
00:07:08Et c'est une raison pour laquelle ils reviennent à une API plus simple où vous avez le contrôle total..
00:07:16Ils utilisent également le mot-clé this pour vous exposer quelques autres API,
00:07:20mais pas énormément en réalité,
00:07:22car l'idée est clairement de garder le framework simple et ciblé,
00:07:26de vous offrir une bonne expérience développeur et de rendre ce framework facile à utiliser.
00:07:31Aussi parce qu'un objectif clair - et ils l'ont déclaré dans un article de blog qu'ils ont partagé plus tôt cette année - un objectif clair pour ce framework est qu'il devrait être facile à utiliser par les grands modèles de langage.
00:07:44L'idée est clairement que vous puissiez alimenter des articles de documentation ou des exemples dans votre historique de chat avec un grand modèle de langage,
00:07:53fournir des informations comme contexte,
00:07:56puis avoir des LLM et des assistants de code qui vous aident à générer le code.
00:08:00Bien sûr,
00:08:01ils doivent faire ça parce que c'est un tout nouveau framework,
00:08:04donc évidemment aucun des grands modèles de langage existants n'a été entraîné sur cette base de code,
00:08:10et dans un avenir prévisible ils ne le seront pas,
00:08:13car 80% de tous les exemples de code front-end sont en React,
00:08:16apparemment.
00:08:17Plus précisément React avec shadcn.
00:08:19Donc bien sûr,
00:08:20ils doivent trouver un autre moyen de permettre aux développeurs de rendre le grand modèle de langage conscient de comment écrire du code remix version 3,
00:08:29ce qui est une autre raison pour laquelle ils gardent l'API simple,
00:08:32j'imagine,
00:08:33et pourquoi ils veulent la garder expressive,
00:08:36facile à comprendre et facile à utiliser,
00:08:38car ce ne sont pas seulement les humains qui doivent l'utiliser,
00:08:42mais aussi les modèles,
00:08:43les grands modèles de langage.
00:08:45C'est clairement un objectif qu'ils avaient.
00:08:47Et vous pouvez le voir dans les exemples qu'ils ont partagés.
00:08:51En plus,
00:08:51un autre objectif qu'ils ont - et ils l'ont déclaré plusieurs fois dans cette keynote,
00:08:56dans cette présentation - c'est qu'ils utilisent des primitives web.
00:09:00Ils utilisent des fonctionnalités disponibles dans les navigateurs modernes,
00:09:04et pas seulement les navigateurs,
00:09:06mais aussi côté serveur - et j'y reviendrai dans quelques secondes.
00:09:10Mais ils utilisent des choses intégrées au navigateur.
00:09:13Ils s'appuient fortement sur les événements natifs et les capacités intégrées pour dispatcher des événements personnalisés.
00:09:20Vous pouvez créer des événements personnalisés dans le navigateur et les dispatcher,
00:09:25et ils s'appuient énormément là-dessus.
00:09:27Ils s'appuient sur les signaux d'abandon pour communiquer qu'un composant a été démonté par exemple,
00:09:33et pour vous permettre d'arrêter automatiquement vos écouteurs d'événements.
00:09:37Donc ils utilisent ce qui est intégré au navigateur parce que je pense vraiment que nous,
00:09:42développeurs web,
00:09:43nous n'avons pas suivi ce que les navigateurs modernes sont capables de faire,
00:09:47et pas seulement les navigateurs modernes - certaines capacités sont là depuis des années et nous ne les utilisons pas.
00:09:54On ne les connaît peut-être même pas.
00:09:56Si vous plongez vraiment dans ce que le DOM a à offrir,
00:09:59ce que les navigateurs ont à offrir,
00:10:02quelles API sont disponibles là-bas,
00:10:04il y a beaucoup de choses que vous pouvez faire et beaucoup de choses où vous n'aurez peut-être pas besoin de bibliothèques tierces supplémentaires,
00:10:12et c'est au final ce qu'ils essaient d'exploiter.
00:10:15Garder ça simple et utiliser ces capacités intégrées,
00:10:18voilà leur approche ici.
00:10:19Maintenant,
00:10:20comme je l'ai dit,
00:10:21c'est quand même un framework.
00:10:23Vous ne créerez pas de nœuds DOM avec createElement et toutes ces API DOM.
00:10:27Au lieu de ça,
00:10:28comme mentionné précédemment,
00:10:29vous créerez toujours des composants en créant des fonctions et en utilisant du code JSX dedans.
00:10:35Ils ont montré tout ça.
00:10:36C'est juste que la gestion d'état fonctionne totalement différemment,
00:10:40que c'est en général plus léger,
00:10:42que vous n'aurez pas de hooks ou quoi que ce soit de ce genre.
00:10:45Aussi parce que ces fonctions composants ne seront pas appelées encore et encore comme c'est le cas dans React.
00:10:52Au lieu de ça,
00:10:52vous aurez deux types de fonctions et selon comment vous les écrivez,
00:10:56elles seront soit appelées une seule fois,
00:10:59soit une partie d'entre elles pourrait être appelée plusieurs fois.
00:11:02Et voilà quelque chose pour les gens qui auraient pu travailler avec React en 2000...
00:11:07je suppose 17 déjà à l'époque,
00:11:09vous vous rappelez peut-être qu'on avait deux types de composants.
00:11:13On avait des composants stateful basés sur les classes qui pouvaient gérer l'état et qui pouvaient se mettre à jour quand cet état changeait,
00:11:21et on avait des composants stateless - et c'étaient les fonctions composants à l'époque.
00:11:26Et puis on a eu les hooks React et tous les composants sont devenus des fonctions composants au final,
00:11:32et ils peuvent être soit stateful soit stateless.
00:11:34Remix version 3 adopte cette approche React old-school pour ainsi dire,
00:11:38mais pas avec des classes ou des fonctions,
00:11:41mais plutôt toujours des fonctions,
00:11:43mais différents types de fonctions.
00:11:45Si vous avez une fonction qui retourne du JSX,
00:11:47c'est un composant stateless au final.
00:11:50Vous ne pouvez pas appeler this.update dedans et vous attendre à ce que la fonction composant soit exécutée à nouveau.
00:11:56Ce n'est pas comme ça que ça fonctionnera.
00:11:59Vous pouvez accepter des props et si le composant parent se re-rend,
00:12:03votre fonction composant sera exécutée à nouveau,
00:12:05etc.
00:12:06Mais vous ne pouvez pas gérer l'état dedans.
00:12:08Vous transformez une fonction composant en une fonction composant stateful pour ainsi dire en ne retournant pas le code JSX,
00:12:16mais en retournant plutôt une fonction qui retourne le code JSX.
00:12:19Donc une fonction composant qui contient et retourne une fonction qui retourne ensuite le code JSX sera alors - ou peut alors être - un composant stateful.
00:12:28Et là,
00:12:28quand vous appelez this.update,
00:12:30cette fonction que vous avez retournée sera exécutée à nouveau,
00:12:34du moins c'est comme ça que je l'ai compris.
00:12:36Donc on a différents types de composants,
00:12:39mais encore une fois une API très simple au final,
00:12:42une façon très simple de différencier entre fonctions composants stateful ou stateless.
00:12:47Et puis il y a le backend,
00:12:48parce que remix version 3 n'est pas juste un framework front-end.
00:12:52Au contraire, c'est un framework full stack.
00:12:54C'est conçu pour être un framework full stack.
00:12:57Mais au fait,
00:12:58ils livreront aussi une bibliothèque de composants qui rend plus simple la construction de composants de formulaires complexes et ainsi de suite.
00:13:06Je devrais aussi mentionner ça.
00:13:08Mais revenons au backend.
00:13:09Ça viendra aussi avec une partie backend.
00:13:11Ça vise à être un framework full stack,
00:13:14front-end et back-end combinés.
00:13:15Encore une fois, sans React entièrement.
00:13:18Au lieu de ça,
00:13:18ils reconstruisent tout depuis zéro pour ainsi dire.
00:13:21Mais côté backend,
00:13:22vous aurez un routeur,
00:13:24un routeur assez capable et puissant,
00:13:26car évidemment,
00:13:27puisqu'ils ont construit React Router pendant les 10 dernières années,
00:13:31ils connaissent beaucoup de choses sur le routing.
00:13:34Donc vous aurez un routeur puissant,
00:13:36vous aurez la capacité de retourner du code JSX et des composants Remix dans vos routes et d'hydrater ces composants sur le serveur.
00:13:43Ils proposent leur propre alternative aux React Server Components,
00:13:47une alternative plus simple qui vous permet de retourner un composant qui peut se mettre à jour après avoir été servi sur le client en récupérant des parties du DOM.
00:13:56Donc quand vous supprimez quelque chose par exemple,
00:13:59vous pourriez envoyer une requête du client vers ce serveur et récupérer du code HTML qui peut être hydraté à nouveau pour mettre à jour des parties du DOM.
00:14:08Donc ils nous donnent toutes ces fonctionnalités pour construire des applications full stack modernes,
00:14:14rapides,
00:14:15type single page,
00:14:16exactement comme vous pouvez le faire avec Next.js ou le mode framework React Router ou d'autres frameworks comme Tanstack Start,
00:14:23mais plus simple - c'est l'objectif clair : avoir une façon simple de construire ces apps.
00:14:28C'est ce qu'ils veulent faire.
00:14:30Il y a plus dans cette présentation.
00:14:32C'est long,
00:14:33mais c'est en quelque sorte la partie la plus importante,
00:14:36je dirais.
00:14:36C'est mon principal enseignement.
00:14:38Ils veulent nous donner un framework full stack simple et puissant.
00:14:42Ils l'écrivent depuis zéro.
00:14:44On a la mise à jour manuelle et ainsi de suite.
00:14:46Donc tout ce que j'ai décrit, en a-t-on besoin ?.
00:14:56C'est la grande question,
00:14:58et je suppose qu'une autre grande question : est-ce que ça va réussir ?
00:15:02Évidemment,
00:15:02les deux questions sont assez difficiles à répondre,
00:15:05mais je vais faire de mon mieux.
00:15:07En a-t-on besoin ??
00:15:08Eh bien,
00:15:08je pense qu'on a beaucoup de frameworks JavaScript là-bas,
00:15:12et clairement il y aura beaucoup de gens qui diront qu'on en a trop,
00:15:16donc la réponse alors serait non.
00:15:18J'ai toujours pensé,
00:15:19même en 2018 quand on avait un nouveau framework chaque semaine,
00:15:23même à l'époque je pensais que c'est toujours bien d'avoir de l'innovation et d'essayer de nouvelles idées.
00:15:29Je ne pense pas qu'on ait besoin d'un nouveau framework qui soit juste comme React avec quelques petites différences.
00:15:36Je ne pense pas qu'on ait besoin de ça.
00:15:38Mais une toute nouvelle approche avec cette mise à jour déclenchée manuellement et tous ces autres petits trucs qu'ils ont,
00:15:46je pense que c'est une excellente idée.
00:15:48Ça vaut vraiment le coup d'essayer.
00:15:50Ça semble intéressant.
00:15:51Ça pourrait nous donner une alternative plus simple à React,
00:15:55qui est génial mais qui est devenu assez complexe au fil des années.
00:15:59Donc oui, on pourrait en avoir besoin.
00:16:01Est-ce que ça va réussir ??
00:16:04C'est une autre question,
00:16:05bien sûr,
00:16:06car surtout maintenant à l'ère de l'IA et des grands modèles de langage,
00:16:10évidemment,
00:16:10ces modèles recommanderont généralement React par défaut.
00:16:13D'un autre côté,
00:16:14les gens qui ne savent pas écrire de code ne sont bien sûr pas nécessairement le public cible,
00:16:19du moins pas directement.
00:16:21J'y reviendrai.
00:16:22Donc ça n'a pas d'importance là.
00:16:23Maintenant,
00:16:24les développeurs expérimentés pourraient cependant être intéressés par l'utilisation de Remix et simplement guider le grand modèle de langage à l'aide d'exemples officiels et ainsi de suite pour générer du code Remix,
00:16:36simplement parce qu'ils veulent avoir une base de code plus simple,
00:16:40car en fin de compte,
00:16:41en tant que développeurs,
00:16:42nous touchons encore notre code.
00:16:44On pourrait générer une grande partie de celui-ci,
00:16:47mais on contrôle toujours le grand modèle de langage.
00:16:50On peaufine encore des parties du code.
00:16:52On pourrait écrire de plus grandes parties de ce code si on a une fonctionnalité très spécifique en tête que l'IA ne semble tout simplement pas réussir à faire correctement.
00:17:02Donc évidemment,
00:17:03on se soucie encore de la pile technologique en tant que développeurs.
00:17:07Moi,
00:17:07je m'en soucie toujours au moins,
00:17:09et je suis sûr que certains d'entre vous aussi.
00:17:12Donc là,
00:17:12il pourrait être intéressant d'essayer autre chose et tant que ce framework est facile à utiliser avec de grands modèles de langage,
00:17:20il y a suffisamment de ressources pour apprendre au grand modèle de langage comment l'utiliser.
00:17:25Ce qui,
00:17:25bien sûr,
00:17:26est quelque chose sur lequel ils semblent se concentrer et qu'ils semblent avoir comme priorité.
00:17:31Ça me semble bien.
00:17:32Donc ça pourrait définitivement leur donner une chance valable de succès.
00:17:36Ce sera évidemment difficile.
00:17:38Mais bon, ça aurait toujours été le cas, j'imagine.
00:17:41Donc je vois des chances,
00:17:42mais bien sûr,
00:17:43c'est un marché encombré pour le dire ainsi.
00:17:45Maintenant,
00:17:46ce qui est important,
00:17:47c'est que Remix appartient à Shopify depuis 2022..
00:17:52Shopify a racheté Remix,
00:17:53on pourrait dire,
00:17:54donc l'équipe de Remix est devenue partie intégrante de Shopify.
00:17:58Maintenant,
00:17:59Shopify est clairement bien sûr intéressé par le fait d'avoir un framework qui est activement maintenu et qui est utilisé au moins à l'intérieur de Shopify,
00:18:08et par là je ne veux pas dire seulement à l'intérieur de l'entreprise pour leurs pages marketing et de branding Shopify.
00:18:16Je veux dire pour les boutiques Shopify.
00:18:18Il est tout à fait possible que l'objectif soit d'avoir Remix comme option pour les vendeurs Shopify qui veulent construire leurs propres boutiques sur Shopify et qui veulent un moyen facile d'ajuster ces boutiques et de construire des vitrines ou des pages personnalisées qui composent la boutique globale.
00:18:37Et ils ont bien sûr un framework qui est facile à utiliser et facile à utiliser avec de grands modèles de langage,
00:18:44ce qui pourrait être énorme.
00:18:46Ce n'est toujours pas une garantie,
00:18:48bien sûr,
00:18:49mais avoir Shopify derrière Remix vaut bien sûr beaucoup,
00:18:52je suppose,
00:18:53et donc je suis assez positif quant à l'avenir de Remix,
00:18:56aussi bien sûr parce qu'ils ont une communauté peut-être petite mais très enthousiaste autant que je puisse en juger.
00:19:04Ils ont un historique impressionnant,
00:19:06évidemment,
00:19:07ayant développé React Router et ainsi de suite.
00:19:10Donc oui, je suis super excité de voir ce qu'on va obtenir.
00:19:13Je suis excité de finalement l'utiliser moi-même parce qu'en ce moment ce n'est pas vraiment possible.
00:19:19Et ce sont mes réflexions là-dessus.
00:19:22Donc comme toujours,
00:19:23faites-moi savoir quelles sont vos réflexions si vous pensez qu'on en a besoin et s'ils vont réussir,
00:19:29et regardez l'intégralité de la partie de quatre heures de la conférence si vous êtes intéressés et que vous voulez en savoir plus..