SlideShare une entreprise Scribd logo
Tutoriel N°0057
ReactJs + Redux
Objectif du projet :
1) Comprendre React dans sa globalité, Flux , Redux ;
2) Comprendre les différentes étapes/parcours à suivre pour une bonne
implémentation ;
3) Projet pratique résumant tout le parcours.
Commençons maintenant !
1) Comprendre React dans sa globalité, Flux, Redux
React est une librairie créée par Facebook permettant de générer des
composants web au travers d’une API. React est aujourd’hui utilisé en
production par plusieurs entreprises telles que Facebook ou AirBnb avec de
très bons résultats, et est donc bel est bien une alternative viable aux
frameworks tels qu’Angular ou Ember.
Cependant l’utilisation de React, qui ne permet que de créer des
composants, pose des questions quant à l’architecture logicielle qu’il faut
utiliser : comment aller chercher sa donnée ? Comment mettre à jour les
composants lorsque la donnée change ? Il est possible de choisir d’utiliser
une approche MVC classique, avec Backbone ou encore Angular, mais
l’approche semble peu naturelle et ne pas respecter la philosophie de React,
qui encourage l’immutabilité et le flux de données à sens unique.
Flux,
Flux est une architecture (ça n’est pas une librairie, et encore moins un
framework) simple et se caractérise par le fait que le flux de données est
unidirectionnel.
Cette architecture contient des vues, les composants React, qui écoutent les
modifications de store pour se mettre à jour. En cas d’évènement utilisateur
(clique, frappe sur le clavier, etc.), le composant React appelle une méthode
d’un objet Action qui lui même appelle le dispatcher, servant ici de "bus
d’évènements". Les stores écoutent le dispatcher et se mettent alors à jour
en fonction des évènements envoyés.
POURQUOI UTILISER REDUX ?
Redux reprend les concepts de Flux mais en simplifiant beaucoup le
processus de développement. Cette simplification est en partie due au fait
que Redux utilise des concepts liés à la programmation fonctionnelle pour
changer l’état de l’application.
Voici un exemple d’une application Redux toute simple :
import { createStore } from 'redux'
Le reducer est une fonction dite "pure" ayant (state, action) => state
comme signature. Il va décrire comment une action transforme le state
(l'état) de l'application en un nouvel état. L'implémentation de l'état de
l'application dépend totalement de votre cas et peut être une primitive, un
tableau, un objet, ou bien même une structure de données immutable (basé
sur Immutable.js par exemple). La seule chose à retenir est que cette partie
ne DOIT PAS modifier l'objet correspondant à l'état de l'application lorsque
l'état change. Dans cet exemple, on utilise un switch et des strings, mais on
pourra très bien utiliser un helper qui va suivre une autre manière de faire.
function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
On crée un Redux store, qui va garder l'état de notre app.
L'api correspond à trois fonctions { subscribe, dispatch, getState }.
On peut s'abonner manuellement ou bien lier l'état à une vue
automatiquement à l'aide du binding.
store.subscribe(() =>
console.log(store.getState())
)
Le seul moyen de modifier l'état de l'application est de dispatcher des
actions.
Les actions peuvent être serialisées, loggées ou sauvegardées pour plus
tard.
store.dispatch({ type: 'INCREMENT' })
// 1
store.dispatch({ type: 'INCREMENT' })
// 2
store.dispatch({ type: 'DECREMENT' })
// 1
Plutôt que de modifier l’état de l’application directement, on spécifie
les modifications qui peuvent arriver avec de simple objets appelés actions.
Puis on écrit une fonction appelée reducer, qui se chargera de décider
comment chaque action transforme l’état de l’application.
DIFFÉRENCES AVEC FLUX ?
1. Redux n’a pas de dispatcher
2. Redux n’a pas la possibilité de définir plusieurs Stores.
A la place, nous avons un store unique avec un seul reducer. Au fur et a
mesure que l’application se complexifie, l’unique reducer va être découpé
en plusieurs petit reducer indépendants.
L’architecture de Redux, semble assez impressionnante (surtout pour une
application de compteur) mais la beauté de la chose est de voir a quel point
on peut “scaler” et comment on arrive à gérer des applications complexes
de manière très simple.
2) COMPRENDRE LES DIFFERENTS
PARCOURS POUR IMPLEMENTER
L’ARCHITECTURE.
3)PROJET PRATIQUE RESUMANT TOUT LE
PARCOURS.
Où allons nous ?
Nous allons créer une liste de fruit qui au click, nous affichera des
informations sur ce dernier
Télécharger le dossier de base ICI
Et installer toutes les dependance : npm install
L’execution de cette commande créera un dossier node_module qui
comportera tous les plugin dont on aura besoin.
L’arboressence de notre dossier en general :
/assets
/dev
/src
Package
README
webpack.config
les assets nous aurons tous les fichiers associer à notre projets (css, js,
images …..)
dev , là se retrouvera tous notre code qui sera regrouper dans un dossier
js
le premier fichier est index.js
import 'babel-polyfill';
import React from 'react';
import ReactDOM from "react-dom";
ReactDOM.render(
<h1> Bonjour chers tous!</h1>,
document.getElementById('root')
);
petite explication
src, le fichier index qui se chargera d’afficher tous notre code js q’uon
aura à ecrire dans le dev et un petit fichier bundle.min
le fichier package.js , il renseigne toute les dependances de notre projet
-----
{
"name": "react-redux-tutoriel",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"dev": "webpack",
"start": "webpack-dev-server"
},
"license": "ISC",
"dependencies": {
"babel-core": "^6.10.4",
"babel-loader": "^6.2.4",
"babel-polyfill": "^6.9.1",
"babel-preset-es2015": "^6.9.0",
"babel-preset-react": "^6.11.1",
"babel-register": "^6.9.0",
"cross-env": "^1.0.8",
"css-loader": "^0.23.1",
"expect": "^1.20.1",
"node-libs-browser": "^1.0.0",
"node-sass": "^3.8.0",
"react": "^15.1.0",
"react-addons-test-utils": "^15.1.0",
"react-dom": "^15.1.0",
"react-redux": "^4.4.5",
"redux": "^3.5.2",
"redux-logger": "^2.6.1",
"redux-promise": "^0.5.3",
"redux-thunk": "^2.1.0",
"sass-loader": "^4.0.0",
"style-loader": "^0.13.1",
"webpack": "^1.13.1",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "^1.14.1",
"webpack-hot-middleware": "^2.11.0"
},
"devDependencies": {
"babel-plugin-react-transform": "^2.0.2",
"babel-preset-stage-0": "^6.5.0",
"react-transform-hmr": "^1.0.4"
}
}
Plus d’explication sur :
Le readme pour les trucs de base.
webpack.config,
var path = require('path');
var webpack = require('webpack');
module.exports = {
devServer: {
inline: true,
contentBase: './src',
port: 3000
},
devtool: 'cheap-module-eval-source-map',
entry: './dev/js/index.js',
module: {
loaders: [
{
test: /.js$/,
loaders: ['babel'],
exclude: /node_modules/
},
{
test: /.scss/,
loader: 'style-loader!css-
loader!sass-loader'
}
]
},
output: {
path: 'src',
filename: 'js/bundle.min.js'
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin()
]
};
Donc en tant normale quand vous demarer le projet vous aurez à
l’écran :
Sur l’url localhost :300/
Comme expliquer précédemment nous allons commencer par
construire petit à petit toute les brique de notre application afin de voir
comment se fait l’implémentation.
Pour cela nous aborderons cette fois ci le Store qui :
Suite du tutoriel ici
Publicité

Contenu connexe

Tendances (17)

Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateurs
Lilia Sfaxi
 
3 shared preference_sq_lite
3 shared preference_sq_lite3 shared preference_sq_lite
3 shared preference_sq_lite
Saber LAJILI
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
Saber LAJILI
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Sabeur LAJILI
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
Geoffray Gruel
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
Lilia Sfaxi
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
abderrahim marzouk
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
Lilia Sfaxi
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
Lilia Sfaxi
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++
Lilia Sfaxi
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
tarkaus
 
#2 Architecture OSGi
#2 Architecture OSGi#2 Architecture OSGi
#2 Architecture OSGi
Guillaume Sauthier
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye Dieng
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
abderrahim marzouk
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateurs
Lilia Sfaxi
 
3 shared preference_sq_lite
3 shared preference_sq_lite3 shared preference_sq_lite
3 shared preference_sq_lite
Saber LAJILI
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
Saber LAJILI
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Sabeur LAJILI
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
Geoffray Gruel
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
Lilia Sfaxi
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
Lilia Sfaxi
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
Lilia Sfaxi
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++
Lilia Sfaxi
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
tarkaus
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye Dieng
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
abderrahim marzouk
 

En vedette (18)

Chapitre 1: VII. Distorsions des impulsions miraculeuses
Chapitre 1: VII. Distorsions des impulsions miraculeusesChapitre 1: VII. Distorsions des impulsions miraculeuses
Chapitre 1: VII. Distorsions des impulsions miraculeuses
Pierrot Caron
 
JDTP Y AKTP BASE DE DATOS 903
JDTP Y AKTP BASE DE DATOS 903JDTP Y AKTP BASE DE DATOS 903
JDTP Y AKTP BASE DE DATOS 903
aktp2311
 
Certificates
CertificatesCertificates
Certificates
Noureldin Adam
 
Magazine evaluation
Magazine evaluationMagazine evaluation
Magazine evaluation
minayakinyaaa
 
Pubblicità e informazione (per avvocati) Limiti e ambiti applicativi
Pubblicità e informazione (per avvocati) Limiti e ambiti applicativiPubblicità e informazione (per avvocati) Limiti e ambiti applicativi
Pubblicità e informazione (per avvocati) Limiti e ambiti applicativi
Paris & Bold in association with Venturis Consulting Group
 
Barroc 2 a
Barroc 2 aBarroc 2 a
Barroc 2 a
Merce Lopez Tugues
 
En iyi koçluk eğitimi
En iyi koçluk eğitimiEn iyi koçluk eğitimi
En iyi koçluk eğitimi
E Koc
 
Arquitectura moderna
Arquitectura modernaArquitectura moderna
Arquitectura moderna
YODALIS ROJAS
 
Case studies for presentation
Case studies for presentationCase studies for presentation
Case studies for presentation
hanaa_m
 
4 psikomotor ve fiziksel gelişim
4   psikomotor ve fiziksel gelişim4   psikomotor ve fiziksel gelişim
4 psikomotor ve fiziksel gelişim
Kenan Polat
 
Final Audience profile
Final Audience profileFinal Audience profile
Final Audience profile
Isabelle Humm
 
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
bendelimiyim
 
OOP Inheritance
OOP InheritanceOOP Inheritance
OOP Inheritance
Anastasia Jakubow
 
Marca Personal
Marca Personal Marca Personal
Marca Personal
Nelly Beatriz Espinal Carrillo
 
Luxito.ir
Luxito.irLuxito.ir
Luxito.ir
Zahir Barahmand
 
The BBC Insitution
The BBC InsitutionThe BBC Insitution
The BBC Insitution
Mollie Owen
 
Comment se logent les voyageurs d'affaires à Paris ?
Comment se logent les voyageurs d'affaires à Paris ?Comment se logent les voyageurs d'affaires à Paris ?
Comment se logent les voyageurs d'affaires à Paris ?
Paris Attitude
 
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Snag
 
Chapitre 1: VII. Distorsions des impulsions miraculeuses
Chapitre 1: VII. Distorsions des impulsions miraculeusesChapitre 1: VII. Distorsions des impulsions miraculeuses
Chapitre 1: VII. Distorsions des impulsions miraculeuses
Pierrot Caron
 
JDTP Y AKTP BASE DE DATOS 903
JDTP Y AKTP BASE DE DATOS 903JDTP Y AKTP BASE DE DATOS 903
JDTP Y AKTP BASE DE DATOS 903
aktp2311
 
En iyi koçluk eğitimi
En iyi koçluk eğitimiEn iyi koçluk eğitimi
En iyi koçluk eğitimi
E Koc
 
Arquitectura moderna
Arquitectura modernaArquitectura moderna
Arquitectura moderna
YODALIS ROJAS
 
Case studies for presentation
Case studies for presentationCase studies for presentation
Case studies for presentation
hanaa_m
 
4 psikomotor ve fiziksel gelişim
4   psikomotor ve fiziksel gelişim4   psikomotor ve fiziksel gelişim
4 psikomotor ve fiziksel gelişim
Kenan Polat
 
Final Audience profile
Final Audience profileFinal Audience profile
Final Audience profile
Isabelle Humm
 
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
(Gelişim+psikolojisi+dersi+için)+motor+gelişim+2.+slayt
bendelimiyim
 
The BBC Insitution
The BBC InsitutionThe BBC Insitution
The BBC Insitution
Mollie Owen
 
Comment se logent les voyageurs d'affaires à Paris ?
Comment se logent les voyageurs d'affaires à Paris ?Comment se logent les voyageurs d'affaires à Paris ?
Comment se logent les voyageurs d'affaires à Paris ?
Paris Attitude
 
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Your Ultimate Hourly Insights Guide: What do your hourly employees really want?
Snag
 
Publicité

Similaire à React redux-tutoriel-1 (20)

Chapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdfChapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdf
HassanHachicha2
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basic
zineblahib2
 
30-days-of-react-ebook-fullstackio-1-150.pdf
30-days-of-react-ebook-fullstackio-1-150.pdf30-days-of-react-ebook-fullstackio-1-150.pdf
30-days-of-react-ebook-fullstackio-1-150.pdf
srpszigui1
 
React-cours.pdf
React-cours.pdfReact-cours.pdf
React-cours.pdf
Jaouad Assabbour
 
2016_js_react.pdf
2016_js_react.pdf2016_js_react.pdf
2016_js_react.pdf
mohamedelhachicha
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
ssuser65180a
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
hugomallet
 
Développement des applications REDUX.pptx
Développement des applications REDUX.pptxDéveloppement des applications REDUX.pptx
Développement des applications REDUX.pptx
SoumiaZITI1
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptx
aissamjadli
 
cours dev d'applications web moderne avec ReactJS
cours dev d'applications web moderne avec ReactJScours dev d'applications web moderne avec ReactJS
cours dev d'applications web moderne avec ReactJS
aissamjadli
 
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPARCours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
LuneSabsPericolo1
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
ATHMAN HAJ-HAMOU
 
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
aissamjadli
 
Activity
ActivityActivity
Activity
dido
 
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbreact (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
zineblahib2
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
Ines Ouaz
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
Winslo Nwan
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
Mathias Seguy
 
Chapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdfChapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdf
HassanHachicha2
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basic
zineblahib2
 
30-days-of-react-ebook-fullstackio-1-150.pdf
30-days-of-react-ebook-fullstackio-1-150.pdf30-days-of-react-ebook-fullstackio-1-150.pdf
30-days-of-react-ebook-fullstackio-1-150.pdf
srpszigui1
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
hugomallet
 
Développement des applications REDUX.pptx
Développement des applications REDUX.pptxDéveloppement des applications REDUX.pptx
Développement des applications REDUX.pptx
SoumiaZITI1
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptx
aissamjadli
 
cours dev d'applications web moderne avec ReactJS
cours dev d'applications web moderne avec ReactJScours dev d'applications web moderne avec ReactJS
cours dev d'applications web moderne avec ReactJS
aissamjadli
 
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPARCours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
Cours_ASP_NET_MVC_Premiers_pas.pdfTESTPAR
LuneSabsPericolo1
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
ATHMAN HAJ-HAMOU
 
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
ReactJS S4 - ReactJS S4 - ReactJS S4 - ReactJS S4
aissamjadli
 
Activity
ActivityActivity
Activity
dido
 
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbreact (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
zineblahib2
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
Ines Ouaz
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
Winslo Nwan
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
Mathias Seguy
 
Publicité

Dernier (20)

Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ? - FAQ 31
Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ?  - FAQ 31Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ?  - FAQ 31
Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ? - FAQ 31
Miguel Delamontagne
 
🎤 Grand oral - Qu'est-ce que le rythme dans un discours ? - 12-17
🎤 Grand oral - Qu'est-ce que le rythme  dans un discours ? - 12-17🎤 Grand oral - Qu'est-ce que le rythme  dans un discours ? - 12-17
🎤 Grand oral - Qu'est-ce que le rythme dans un discours ? - 12-17
Miguel Delamontagne
 
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Miguel Delamontagne
 
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptxScience_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Abdelali73
 
Security Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
Security Issues For Wireless Sensor Networks Parag Verma Ankur DumkaSecurity Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
Security Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
upmankramb0m
 
🎤 Grand oral - Pourquoi avoir une voix qui porte est cruciale ? - 11-17
🎤 Grand oral -  Pourquoi avoir une voix qui porte est cruciale ? - 11-17🎤 Grand oral -  Pourquoi avoir une voix qui porte est cruciale ? - 11-17
🎤 Grand oral - Pourquoi avoir une voix qui porte est cruciale ? - 11-17
Miguel Delamontagne
 
Phase Transformations In Materials G Kostorz
Phase Transformations In Materials G KostorzPhase Transformations In Materials G Kostorz
Phase Transformations In Materials G Kostorz
jhanganara1l
 
L'ART DÉGÉNÉRÉ.pptx Musée Picasso
L'ART DÉGÉNÉRÉ.pptx     Musée    PicassoL'ART DÉGÉNÉRÉ.pptx     Musée    Picasso
L'ART DÉGÉNÉRÉ.pptx Musée Picasso
Txaruka
 
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
thomasleboisvert
 
Environmental Planning 1st Edition Rebecca D. Newton
Environmental Planning 1st Edition Rebecca D. NewtonEnvironmental Planning 1st Edition Rebecca D. Newton
Environmental Planning 1st Edition Rebecca D. Newton
pardytrixi6t
 
DA ESCOLAR À REGIONAL - 3.º Ciclo _
DA ESCOLAR À REGIONAL - 3.º Ciclo       _DA ESCOLAR À REGIONAL - 3.º Ciclo       _
DA ESCOLAR À REGIONAL - 3.º Ciclo _
Colégio Santa Teresinha
 
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
thomasleboisvert
 
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
petitionhistoire
 
A1- Séquence pédagogique : Portraits de voyageurs.pdf
A1- Séquence pédagogique : Portraits de voyageurs.pdfA1- Séquence pédagogique : Portraits de voyageurs.pdf
A1- Séquence pédagogique : Portraits de voyageurs.pdf
LeBaobabBleu1
 
🎤 Grand oral - Comment les pauses aident-elles l'audience ? - 14-17
🎤 Grand oral - Comment les pauses  aident-elles l'audience ? - 14-17🎤 Grand oral - Comment les pauses  aident-elles l'audience ? - 14-17
🎤 Grand oral - Comment les pauses aident-elles l'audience ? - 14-17
Miguel Delamontagne
 
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Miguel Delamontagne
 
Grand oral 🎤 - Comment construire un discours qui captive ? - 4/17
Grand oral 🎤 - Comment construire un  discours qui captive ?  - 4/17Grand oral 🎤 - Comment construire un  discours qui captive ?  - 4/17
Grand oral 🎤 - Comment construire un discours qui captive ? - 4/17
Miguel Delamontagne
 
Dictionary of Distances 1st Edition Michel Marie Deza
Dictionary of Distances 1st Edition Michel Marie DezaDictionary of Distances 1st Edition Michel Marie Deza
Dictionary of Distances 1st Edition Michel Marie Deza
huapepotts09
 
🎤 Grand oral - Qu'est-ce que l'appréhension de la peur de parler en public ...
🎤 Grand oral -  Qu'est-ce que  l'appréhension de la peur de parler en public ...🎤 Grand oral -  Qu'est-ce que  l'appréhension de la peur de parler en public ...
🎤 Grand oral - Qu'est-ce que l'appréhension de la peur de parler en public ...
Miguel Delamontagne
 
Applications des reaction d'oxydoreduction.pptx
Applications des reaction d'oxydoreduction.pptxApplications des reaction d'oxydoreduction.pptx
Applications des reaction d'oxydoreduction.pptx
aitlouhisoufyan
 
Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ? - FAQ 31
Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ?  - FAQ 31Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ?  - FAQ 31
Grand oral 🎤 - Le jury peut-il interroger sur tout le programme ? - FAQ 31
Miguel Delamontagne
 
🎤 Grand oral - Qu'est-ce que le rythme dans un discours ? - 12-17
🎤 Grand oral - Qu'est-ce que le rythme  dans un discours ? - 12-17🎤 Grand oral - Qu'est-ce que le rythme  dans un discours ? - 12-17
🎤 Grand oral - Qu'est-ce que le rythme dans un discours ? - 12-17
Miguel Delamontagne
 
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Grand oral 🎤 - Quel est le rôle de l'examinateur non spécialiste au Grand Ora...
Miguel Delamontagne
 
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptxScience_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Science_Class_Presentation_in_Pink_Blue_Flat_Graphic_Style_20250207.pptx
Abdelali73
 
Security Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
Security Issues For Wireless Sensor Networks Parag Verma Ankur DumkaSecurity Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
Security Issues For Wireless Sensor Networks Parag Verma Ankur Dumka
upmankramb0m
 
🎤 Grand oral - Pourquoi avoir une voix qui porte est cruciale ? - 11-17
🎤 Grand oral -  Pourquoi avoir une voix qui porte est cruciale ? - 11-17🎤 Grand oral -  Pourquoi avoir une voix qui porte est cruciale ? - 11-17
🎤 Grand oral - Pourquoi avoir une voix qui porte est cruciale ? - 11-17
Miguel Delamontagne
 
Phase Transformations In Materials G Kostorz
Phase Transformations In Materials G KostorzPhase Transformations In Materials G Kostorz
Phase Transformations In Materials G Kostorz
jhanganara1l
 
L'ART DÉGÉNÉRÉ.pptx Musée Picasso
L'ART DÉGÉNÉRÉ.pptx     Musée    PicassoL'ART DÉGÉNÉRÉ.pptx     Musée    Picasso
L'ART DÉGÉNÉRÉ.pptx Musée Picasso
Txaruka
 
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
Le Mythe du "Don" : La Communication Efficace, Ça S'apprend ! - DI - GP - 1-2
thomasleboisvert
 
Environmental Planning 1st Edition Rebecca D. Newton
Environmental Planning 1st Edition Rebecca D. NewtonEnvironmental Planning 1st Edition Rebecca D. Newton
Environmental Planning 1st Edition Rebecca D. Newton
pardytrixi6t
 
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
Dépasser la peur de l’imprévu : apprendre à improviser à l’oral en toute conf...
thomasleboisvert
 
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
Pétition au Grand Conseil du canton de Genève pour le maintien des heures d’h...
petitionhistoire
 
A1- Séquence pédagogique : Portraits de voyageurs.pdf
A1- Séquence pédagogique : Portraits de voyageurs.pdfA1- Séquence pédagogique : Portraits de voyageurs.pdf
A1- Séquence pédagogique : Portraits de voyageurs.pdf
LeBaobabBleu1
 
🎤 Grand oral - Comment les pauses aident-elles l'audience ? - 14-17
🎤 Grand oral - Comment les pauses  aident-elles l'audience ? - 14-17🎤 Grand oral - Comment les pauses  aident-elles l'audience ? - 14-17
🎤 Grand oral - Comment les pauses aident-elles l'audience ? - 14-17
Miguel Delamontagne
 
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Grand oral 🎤 - Qu’est-ce que le « Grand oral » ? - FAQ 1
Miguel Delamontagne
 
Grand oral 🎤 - Comment construire un discours qui captive ? - 4/17
Grand oral 🎤 - Comment construire un  discours qui captive ?  - 4/17Grand oral 🎤 - Comment construire un  discours qui captive ?  - 4/17
Grand oral 🎤 - Comment construire un discours qui captive ? - 4/17
Miguel Delamontagne
 
Dictionary of Distances 1st Edition Michel Marie Deza
Dictionary of Distances 1st Edition Michel Marie DezaDictionary of Distances 1st Edition Michel Marie Deza
Dictionary of Distances 1st Edition Michel Marie Deza
huapepotts09
 
🎤 Grand oral - Qu'est-ce que l'appréhension de la peur de parler en public ...
🎤 Grand oral -  Qu'est-ce que  l'appréhension de la peur de parler en public ...🎤 Grand oral -  Qu'est-ce que  l'appréhension de la peur de parler en public ...
🎤 Grand oral - Qu'est-ce que l'appréhension de la peur de parler en public ...
Miguel Delamontagne
 
Applications des reaction d'oxydoreduction.pptx
Applications des reaction d'oxydoreduction.pptxApplications des reaction d'oxydoreduction.pptx
Applications des reaction d'oxydoreduction.pptx
aitlouhisoufyan
 

React redux-tutoriel-1

  • 1. Tutoriel N°0057 ReactJs + Redux Objectif du projet : 1) Comprendre React dans sa globalité, Flux , Redux ; 2) Comprendre les différentes étapes/parcours à suivre pour une bonne implémentation ; 3) Projet pratique résumant tout le parcours. Commençons maintenant ! 1) Comprendre React dans sa globalité, Flux, Redux React est une librairie créée par Facebook permettant de générer des composants web au travers d’une API. React est aujourd’hui utilisé en production par plusieurs entreprises telles que Facebook ou AirBnb avec de très bons résultats, et est donc bel est bien une alternative viable aux frameworks tels qu’Angular ou Ember. Cependant l’utilisation de React, qui ne permet que de créer des composants, pose des questions quant à l’architecture logicielle qu’il faut utiliser : comment aller chercher sa donnée ? Comment mettre à jour les composants lorsque la donnée change ? Il est possible de choisir d’utiliser une approche MVC classique, avec Backbone ou encore Angular, mais l’approche semble peu naturelle et ne pas respecter la philosophie de React, qui encourage l’immutabilité et le flux de données à sens unique. Flux, Flux est une architecture (ça n’est pas une librairie, et encore moins un framework) simple et se caractérise par le fait que le flux de données est unidirectionnel.
  • 2. Cette architecture contient des vues, les composants React, qui écoutent les modifications de store pour se mettre à jour. En cas d’évènement utilisateur (clique, frappe sur le clavier, etc.), le composant React appelle une méthode d’un objet Action qui lui même appelle le dispatcher, servant ici de "bus d’évènements". Les stores écoutent le dispatcher et se mettent alors à jour en fonction des évènements envoyés. POURQUOI UTILISER REDUX ? Redux reprend les concepts de Flux mais en simplifiant beaucoup le processus de développement. Cette simplification est en partie due au fait que Redux utilise des concepts liés à la programmation fonctionnelle pour changer l’état de l’application. Voici un exemple d’une application Redux toute simple : import { createStore } from 'redux' Le reducer est une fonction dite "pure" ayant (state, action) => state comme signature. Il va décrire comment une action transforme le state (l'état) de l'application en un nouvel état. L'implémentation de l'état de l'application dépend totalement de votre cas et peut être une primitive, un tableau, un objet, ou bien même une structure de données immutable (basé sur Immutable.js par exemple). La seule chose à retenir est que cette partie ne DOIT PAS modifier l'objet correspondant à l'état de l'application lorsque l'état change. Dans cet exemple, on utilise un switch et des strings, mais on pourra très bien utiliser un helper qui va suivre une autre manière de faire. function counter(state = 0, action) { switch (action.type) { case 'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 default: return state } }
  • 3. On crée un Redux store, qui va garder l'état de notre app. L'api correspond à trois fonctions { subscribe, dispatch, getState }. On peut s'abonner manuellement ou bien lier l'état à une vue automatiquement à l'aide du binding. store.subscribe(() => console.log(store.getState()) ) Le seul moyen de modifier l'état de l'application est de dispatcher des actions. Les actions peuvent être serialisées, loggées ou sauvegardées pour plus tard. store.dispatch({ type: 'INCREMENT' }) // 1 store.dispatch({ type: 'INCREMENT' }) // 2 store.dispatch({ type: 'DECREMENT' }) // 1 Plutôt que de modifier l’état de l’application directement, on spécifie les modifications qui peuvent arriver avec de simple objets appelés actions. Puis on écrit une fonction appelée reducer, qui se chargera de décider comment chaque action transforme l’état de l’application. DIFFÉRENCES AVEC FLUX ? 1. Redux n’a pas de dispatcher 2. Redux n’a pas la possibilité de définir plusieurs Stores.
  • 4. A la place, nous avons un store unique avec un seul reducer. Au fur et a mesure que l’application se complexifie, l’unique reducer va être découpé en plusieurs petit reducer indépendants. L’architecture de Redux, semble assez impressionnante (surtout pour une application de compteur) mais la beauté de la chose est de voir a quel point on peut “scaler” et comment on arrive à gérer des applications complexes de manière très simple. 2) COMPRENDRE LES DIFFERENTS PARCOURS POUR IMPLEMENTER L’ARCHITECTURE.
  • 5. 3)PROJET PRATIQUE RESUMANT TOUT LE PARCOURS. Où allons nous ?
  • 6. Nous allons créer une liste de fruit qui au click, nous affichera des informations sur ce dernier Télécharger le dossier de base ICI Et installer toutes les dependance : npm install L’execution de cette commande créera un dossier node_module qui comportera tous les plugin dont on aura besoin. L’arboressence de notre dossier en general : /assets /dev /src Package README webpack.config les assets nous aurons tous les fichiers associer à notre projets (css, js, images …..) dev , là se retrouvera tous notre code qui sera regrouper dans un dossier js le premier fichier est index.js import 'babel-polyfill'; import React from 'react'; import ReactDOM from "react-dom"; ReactDOM.render( <h1> Bonjour chers tous!</h1>, document.getElementById('root') ); petite explication
  • 7. src, le fichier index qui se chargera d’afficher tous notre code js q’uon aura à ecrire dans le dev et un petit fichier bundle.min le fichier package.js , il renseigne toute les dependances de notre projet ----- { "name": "react-redux-tutoriel", "version": "1.0.0", "main": "index.js", "scripts": { "dev": "webpack", "start": "webpack-dev-server" }, "license": "ISC", "dependencies": { "babel-core": "^6.10.4", "babel-loader": "^6.2.4", "babel-polyfill": "^6.9.1", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.11.1", "babel-register": "^6.9.0", "cross-env": "^1.0.8", "css-loader": "^0.23.1", "expect": "^1.20.1", "node-libs-browser": "^1.0.0", "node-sass": "^3.8.0", "react": "^15.1.0", "react-addons-test-utils": "^15.1.0", "react-dom": "^15.1.0", "react-redux": "^4.4.5", "redux": "^3.5.2", "redux-logger": "^2.6.1", "redux-promise": "^0.5.3", "redux-thunk": "^2.1.0", "sass-loader": "^4.0.0", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1", "webpack-dev-server": "^1.14.1", "webpack-hot-middleware": "^2.11.0" }, "devDependencies": { "babel-plugin-react-transform": "^2.0.2",
  • 8. "babel-preset-stage-0": "^6.5.0", "react-transform-hmr": "^1.0.4" } } Plus d’explication sur : Le readme pour les trucs de base. webpack.config, var path = require('path'); var webpack = require('webpack'); module.exports = { devServer: { inline: true, contentBase: './src', port: 3000 }, devtool: 'cheap-module-eval-source-map', entry: './dev/js/index.js', module: { loaders: [ { test: /.js$/, loaders: ['babel'], exclude: /node_modules/ }, { test: /.scss/, loader: 'style-loader!css- loader!sass-loader' } ] }, output: { path: 'src', filename: 'js/bundle.min.js'
  • 9. }, plugins: [ new webpack.optimize.OccurrenceOrderPlugin() ] }; Donc en tant normale quand vous demarer le projet vous aurez à l’écran : Sur l’url localhost :300/ Comme expliquer précédemment nous allons commencer par construire petit à petit toute les brique de notre application afin de voir comment se fait l’implémentation. Pour cela nous aborderons cette fois ci le Store qui : Suite du tutoriel ici
  翻译: