
|
MBDS Madagascar 2019-2020
De $1
Introduction
Dans ce cours nous ferons des rappels sur JavaScript et feront une introduction à VueJS et peut-être à React.
Avant tout chose :
- Quel est votre niveau en JavaScript ?
- Avez-vous utilisé NodeJS ?
- Avez-vous utilisé VueJS, React ou Angular ?
Jour 1: Single page webapps avec VueJS, bases de données synchronisées dans le cloud
Partie 1 Live coding: de JavaScript aux librairies aux frameworks
Exemples fait en cours (liste de restaurants, avec ajout et suppression):
- En pur JavaScript avec utilisation des APIs du DOM (append, createElement, removeChild, innerHTML) et de la selector API (document.querySelector...) : https://jsbin.com/wocesuqaho/edit?js,output23
- Le même exemple mais en utilisant des librairies pour simplifier certaines parties (ici utilisation de lodash pour la génération d'ids, de jQuery pour simplifier l'utilisation du DOM): https://jsbin.com/newepid/edit?js,output25
- Enfin, encore le même exemple mais avec l'utilisation du framework VueJS en mode déclaratif : https://jsbin.com/powofij/edit?js,output28
- Un autre exemple mais qui utilise cette fois-ci des "components" : https://jsbin.com/powofij/edit?html,css,output30
- Autre exemple mais on va chercher des données distantes via une requête Ajax basée sur l'API fetch : https://jsbin.com/popuwut/edit?html,js,output31
Partie 2 : découverte de VueJS en mode CLI (command line interface)
ETAPE 1 : installation de NodeJS (nécessaire pour développement CLI)
Allez sur le site https://nodejs.org32 et installez la version "recommended for most users".
Si tout se passe bien, après l'installation, ouvrez une fenêtre de terminal et tapez la commande "node -v". Ca doit afficher la version de nodeJS que vous venez d'installer.
Vérifiez que vous avez bien:
- Une version de node >= 10.16 (commande à taper : "node -v)
- Une version de npm >= 6.11 (commande à taper : "npm -v")
Etape 2 : Création d'une application simple en mode CLI, utilisant la base de données synchronisée Google Firestore
Travail à faire :
-
Suivre ce tutorial33 -
En vous aidant de ce petit exemple jsbin34 qui consomme des données depuis une API REST à propos de groupes de musique rock, modifiez votre programme VueJS pour qu'il affiche les membres de Metallica. Avez-vous pensé à faire un Composant GroupeRock ? -
CORRECTION avec GroupeRock.vue : télécharger cette archive35, dezipper, aller dans le répertoire et faites "npm install", puis "npm run dev"
Jour 2 : on utilise une librairie graphique ! (Vue Material) et intro à React
Partie 1 : utilisation de Vue-Material avec VueJS
On va suivre le "Getting started" du site officiel de Vue-Material (https://vuematerial.io/36) et on va utiliser quelques composants, notamment les "datatables"...
Ici exemple fait en classe dans cette archive37: dezipper, faire "npm install" et "npm run dev"'
Partie 2 : premiers pas avec React
Supports de cours :
On peut faire du react dans JsBin/JsFiddle/CodePen, mais croyez-moi, juste pour de petits exemples !
Exercice à faire en vous aidant des exercices précédents:
Pour vous donner une idée du résultat attendu,voici l'équivalent en VueJS: http://jsbin.com/guwetoy/1/edit?html,output53
Je conseille de partir de cet exemple React: le composant en classe ES654
En vous aidant de l'exemple fait en classe en live coding, voud devrez faire incrémentalement, en testant après chaque étape :
- Créez un <div> et affichez dedans un composant Root avec React (l'App des exemples)
- Affichez un tableau de hobbies dans ce <div> (foot, tennis, jeux video, etc.) sous la forme d'une liste. Chaque hobby sera un <li>. Vous fournirez des hobbies par défaut.
- Ajoutez un bouton 'Nouveau Hobby' et un champ input pour saisir le nom du hobbie à rajouter. La liste doit se mettre à jour.
- Rendez les hobbies clickables pour qu'on puisse les supprimer
- Un message <p>Hobby supprimé !</p> devra apparaitre lorsqu'un hobby est supprimé
- Ajoutez un compteur de hobbies (<p>Hobbies: 4</p>) au-dessus de la liste des hobbies, qui indiquera le nombre de hobbies dans la liste.
- Vous changerez les styles CSS des éléments de la liste pour qu'ils s'affichent en rouge et vert à chaque ligne, en alternance. Vous utiliserez aussi des classes CSS dynamiques pour afficher le compteur en rouge si le nombre de hobbies est supérieur à trois, en vert sinon.
- Chaque <li>, chaque hobby, sera maintenant dans un composant <Hobby/>
ICI CORRRECTION "classique" : https://codepen.io/w3devcampus/pen/xxGOPXO?editors=001055
ICI UNE CORRECTION AVANCEE (qui utilise la "destructuration" et les arrow functions en masse): https://codepen.io/w3devcampus/pen/xxKeJZW56
Partie 3 : on continue avec React (intro au mode CLI)
Exercices avec un environnement "CLI"
Si on va voir la page de facebook sur "how to start with React", il y a un chapitre qui concerne le mode "CLI": https://reactjs.org/docs/add-react-to-a-new-app.html57
- Vous devez avoir nodeJS correctement installé (node, npm, etc, tout ceci doit fonctionner...)
- Installez l'extension Google Chrome "React Developer Tools" (https://chrome.google.com/webstore/d...jfkapdkoienihi58), elle existe aussi pour Firefox.
- Ouvrir la ligne de commande et exécuter la commande "
npm install -g create-react-app ", - Pour vérifier que ça fonctionne, créez un autre répertoire nommé "
react_cli " et cd dedans, - Executez "
create-react-app hello-world " (ça prend du temps, quelques minutes)... - Allez dans le répertoire créé (
cd hello-world ), et faites "npm install " (là aussi, quelques minutes) - Exécutez le programme en tapant "
npm start ", ça doit ouvrir automatiquement le browser sur le port 3000 et afficher une page avec le logo React qui tourne. - Editez le code du fichier
src/App.js , changez le texte et sauvez -> la page Web de l'application doit se rafraichir automatiquement. - Maintenant on va étudier le code, regardez les fichiers html, js, les configs etc.
- Essayez de modifier la partie "render" de App.js... hmmm ok. Bon, par exemple, essayer de faire un simple composant
<Username name="toto"/> qu'on va mettre dans un sous répertoire "components" dans les sources, il va simplement afficher un nom passé en attribut/props dans un paragraphe en couleur. Vous ajouterez dans <App/> Plusieurs instances de ce composant.
Exercice 1: refaire dans le projet les hobbies en mode CLI !
Exercice 2 : compléter le rendu des photos distantes dans le composant Photos.js
Correction ici : récupérer cette archive62, "npm install" puis "npm run start"
Partie 4 : utilisation du router et de la bilbiothèque graphique Material UI
N'oubliez pas : vous avez un livre dans les supports de cours, sur Material UI !
Support de cours :
A faire:
Le reste s'est passé en Live Coding. Ici une correction utilisant le router, et une table MaterialUI pour afficher les Hobbies: dans cette archive66. Faites "npm install" puis "npm run start".
Sujet du Mini Projet
Modalités
- Date de rendu : Dimanche 22 Mars minuit.
- A faire par groupe de 1 ou 2.
- Le projet devra être sur github
- Le projet devra être hébergé quelque part. Vous devrez faire un "npm run build" pour avoir une version "à publier" et non une version "de developpement".
Sujet : visualisation de données sur le groupe Metallica:
- A FAIRE OBLIGATOIRE: Afficher un maximum d'informations sur le groupe, ses membres, ses disques, etc. Vous prendrez comme modèle la page affichée sur le site, tout en gardant la liberté de présenter les choses différemment : https://wasabi.i3s.unice.fr/#/search/artist/Metallica,
67 - Optionnellement, si vous êtes forts, faire une version qui au lieu d'utiliser la description locale de Metallica (dans le fichier Metallica.js du projet exemple donné un peu plus loin), utilise les Web Services proposés par : https://wasabi.i3s.unice.fr/apidoc/68 pour avoir un champs de recherche par groupe, qui récupère les données en Ajax (via fetch) du groupe recherché, et affiche les données de ce groupe. Essayez de chercher "Metallica" avec https://wasabi.i3s.unice.fr/69 et ouvrez le debugger sur l'onglet "network", avec le filtre "XhR et Fetch" activé, vous verrez l'URL de l'API utilisé.
Vous pourre faire le projet en VueJS compilé, ou en React. Je donne ici un projet React qui vous servira de point de départ70. Il contient un fichier src/data/metallica.js qui exporte les données sur Metallica. Il contient aussi deux composants fonctionnels GroupeRock.js et MembreGroupeRock.js qui affichent dans une table Material UI les membres du groupe.
Vous partirez de cet exemple pour faire un joli affichage, à l'aide de Material UI, des données de Metallica (ou d'autres groupes si vous faites la partie optionelle du projet).
Notes de bas de page1 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Introduction 2 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Jour_1.3a_Single_page_webapps_avec_VueJS.2c_bases_de_donn.c3.a9es_synchronis.c3.a9es_dans_le_cloud 3 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Supports_de_cours 4 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_1_Live_coding.3a_de_JavaScript_aux_librairies_aux_frameworks 5 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_2_.3a_d.c3.a9couverte_de_VueJS_en_mode_CLI_(command_line_interface) 6 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Jour_2_.3a_on_utilise_une_librairie_graphique_!_(Vue_Material)_et_intro_.c3.a0_React 7 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_1_.3a_utilisation_de_Vue-Material_avec_VueJS 8 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_2_.3a_premiers_pas_avec_React 9 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Supports_de_cours_.3a 10 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#On_peut_faire_du_react_dans_JsBin.2fJsFiddle.2fCodePen.2c_mais_croyez-moi.2c_juste_pour_de_petits_exemples_! 11 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Exercice_.c3.a0_faire_en_vous_aidant_des_exercices_pr.c3.a9c.c3.a9dents.3a 12 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_3_.3a_on_continue_avec_React_(intro_au_mode_CLI) 13 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Exercices_avec_un_environnement_.22CLI.22 14 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Partie_4_.3a_utilisation_du_router_et_de_la_bilbioth.c3.a8que_graphique_Material_UI 15 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020#Sujet_du_Mini_Projet 16 https://docs.google.com/presentation/d/1ZxsrmEhqRvKGlrC7ijkrv2fBhb-fIv4gy5mUXRESMPY/edit?usp=sharing 17 https://vuejs.org/ 18 https://www.vuemastery.com/courses/intro-to-vue-js/vue-instance/ 19 https://www.youtube.com/watch?v=5lVQgZzLMHc 20 https://posva.net/slides/vue/ 21 https://slides.com/akryum/vue-mixit-2018/fullscreen#/ 22 https://slides.maxpou.fr/vuejs-training 23 https://jsbin.com/wocesuqaho/edit?js,output 24 https://www.edx.org/course/javascript-introduction 25 https://jsbin.com/newepid/edit?js,output 26 https://lodash.com/ 27 http://jquery.com/ 28 https://jsbin.com/powofij/edit?js,output 29 https://vuejs.org/ 30 https://jsbin.com/powofij/edit?html,css,output 31 https://jsbin.com/popuwut/edit?html,js,output 32 https://nodejs.org 33 http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/MBDS_Madagascar_2019-2020/Tutorial_vueJS_%2f%2f_Firestore 34 https://jsbin.com/towejoh/edit?js,console 35 http://miageprojet2.unice.fr/@api/deki/files/2922/=fire-app.zip 36 https://vuematerial.io/ 37 http://miageprojet2.unice.fr/@api/deki/files/2923/=fire-app2MaterialUI.zip 38 http://miageprojet2.unice.fr/@api/deki/files/2907/=SupportsDeCoursReactReduxMaterialUI.zip 39 https://www.53js.fr/javascript.html 40 https://codepen.io/w3devcampus/pen/rpQBNK?editors=1010 41 https://codepen.io/w3devcampus/pen/rpQBWq 42 https://codepen.io/w3devcampus/pen/PExYam 43 https://codepen.io/w3devcampus/pen/mpQbvW 44 https://codepen.io/w3devcampus/pen/zpMObg 45 https://codepen.io/w3devcampus/pen/PExYrO?editors=1010 46 https://codepen.io/w3devcampus/pen/qpQBrq?editors=1010 47 https://codepen.io/w3devcampus/pen/zpMYEr?editors=0010 48 https://codepen.io/w3devcampus/pen/mpQdoG?editors=0010 49 https://codepen.io/w3devcampus/pen/jYQEbP?editors=0010 50 https://codepen.io/w3devcampus/pen/vpQEgv?editors=0010 51 https://codepen.io/w3devcampus/pen/goQpPr?editors=0010 52 https://codepen.io/w3devcampus/pen/ypQNvq?editors=0010 53 http://jsbin.com/guwetoy/1/edit?html,output 54 https://codepen.io/w3devcampus/pen/wvwZXxZ 55 https://codepen.io/w3devcampus/pen/xxGOPXO?editors=0010 56 https://codepen.io/w3devcampus/pen/xxKeJZW 57 https://reactjs.org/docs/add-react-to-a-new-app.html 58 https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi 59 http://miageprojet2.unice.fr/@api/deki/files/2924/=hello-worldReactPhotosAFaire.zip 60 https://docs.google.com/presentation/d/1yZek3hx93u392a3A8R6RFgpZrMY1gPFpeUEEPn8A4dA/edit?usp=sharing 61 https://github.com/53js/tp2-hobbies.git 62 http://miageprojet2.unice.fr/@api/deki/files/2925/=hello-worldAvecPhotosEtFetch.zip 63 https://docs.google.com/presentation/d/17CSKSW3Vy58iJKMZqHn8Eq5B5oEzP04g7Eu8g-S9nGo/edit?usp=sharing 64 https://material-ui.com/ 65 https://reacttraining.com/react-router/web/guides/quick-start 66 http://miageprojet2.unice.fr/@api/deki/files/2926/=hello-worldAvecTableMaterialUI.zip 67 https://wasabi.i3s.unice.fr/#/search/artist/Metallica 68 https://wasabi.i3s.unice.fr/apidoc/ 69 https://wasabi.i3s.unice.fr/ 70 http://miageprojet2.unice.fr/@api/deki/files/2927/=hello-worldReactMetallica.zip
|