SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
Twitter ☞ @phacks
GitHub ☞ @phacks
Work ☞ @Theodo
Nicolas Goutay
Paris.js #55 // @phacks
Retour vers le Futur
avec
React, Redux & Immutable
Paris.js #55 // @phacks
Les frustrations du debugging
Paris.js #55 // @phacks
Modification du code
console.log ou debugger
Rebuild & refresh de l’app
Retour au state
Wash, rince, repeat
Répétition des actions
Redux, le meilleur ami du dev React
Paris.js #55 // @phacks
Réinterprétation du pattern Flux
Permet d’alimenter en données et de définir
les actions de composants React
Redux, le meilleur ami du dev React
Paris.js #55 // @phacks
Hot reloading ! 👌
Redux, le meilleur ami du dev React
Paris.js #55 // @phacks
Hot reloading ! 👌
Visualisation du state tree en temps réel ! 👏
Redux, le meilleur ami du dev React
Paris.js #55 // @phacks
Hot reloading ! 👌
Visualisation du state tree en temps réel ! 👏
Un debugger qui voyage dans le temps ! 🎉
Redux, une machine à états
Paris.js #55 // @phacks
Redux, une machine à états
Paris.js #55 // @phacks
Les composants UI React avec Redux
Paris.js #55 // @phacks
render() {
// …
return <li className={itemClass}>
<div className="view">
<input type="checkbox"
className="toggle"
defaultChecked={this.props.isCompleted}
onClick={() => this.props.toggleComplete(this.props.id)} />
<label htmlFor="todo"
ref="text"
onDoubleClick={() => this.props.editItem(this.props.id)}>
{this.props.text}
</label>
<button className="destroy"
onClick={() => this.props.deleteItem(this.props.id)}></button>
</div>
</li>
}
};
Rien dans les mains, tout dans les props !
Les Actions
Paris.js #55 // @phacks
export function toggleComplete(itemId) {
return {
type: 'TOGGLE_COMPLETE',
itemId
}
}
export function deleteItem(itemId) {
return {
type: 'DELETE_ITEM',
itemId
}
}
Une structure de données JSON normalisée
Les Reducers
Paris.js #55 // @phacks
function toggleComplete(state, itemId) {
const itemIndex = state.get('todos').findIndex(
(item) => item.get('id') === itemId
);
const updatedItem = state.get('todos')
.get(itemIndex)
.update('status', status => status === 'active' ? 'completed' : 'active');
return state.update('todos', todos => todos.set(itemIndex, updatedItem));
}
export default function(state = Map(), action) {
switch (action.type) {
case 'TOGGLE_COMPLETE':
return toggleComplete(state, action.itemId);
}
return state;
}
Pures fonctions : (state, action) ! newState
Implémentent la logique applicative
Pourquoi choisir Redux ?
Paris.js #55 // @phacks
Un debugger qui fait aimer le debugging ❤
Le pattern force à structurer clairement son app
Tests unitaires simple à mettre en place et
découplés (UI d’un côté, logique de l’autre)
Compatible React Native, Angular 1 & 2, VueJS…
Ressources
Paris.js #55 // @phacks
Mon tutoriel TodoMVC : bit.ly/1SDK1G2
Realtime app, Redux en front & back : bit.ly/1W1adrS
Un clone de Trello avec Redux & Phoenix : bit.ly/1YNekZh
Merci ! 🤗
Questions ?
Paris.js #55 // @phacks

Más contenido relacionado

Similar a Paris js

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchSynchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchgplanchat
 
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbreact (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbzineblahib2
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
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 basiczineblahib2
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575kate2013
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressIZZA Samir
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 

Similar a Paris js (20)

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Apprenez le jQuery
Apprenez le jQueryApprenez le jQuery
Apprenez le jQuery
 
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchSynchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batch
 
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbreact (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
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
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
 
Introduction a jQuery
Introduction a jQueryIntroduction a jQuery
Introduction a jQuery
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 

Paris js

  • 1. Twitter ☞ @phacks GitHub ☞ @phacks Work ☞ @Theodo Nicolas Goutay Paris.js #55 // @phacks
  • 2. Retour vers le Futur avec React, Redux & Immutable Paris.js #55 // @phacks
  • 3. Les frustrations du debugging Paris.js #55 // @phacks Modification du code console.log ou debugger Rebuild & refresh de l’app Retour au state Wash, rince, repeat Répétition des actions
  • 4. Redux, le meilleur ami du dev React Paris.js #55 // @phacks Réinterprétation du pattern Flux Permet d’alimenter en données et de définir les actions de composants React
  • 5. Redux, le meilleur ami du dev React Paris.js #55 // @phacks Hot reloading ! 👌
  • 6. Redux, le meilleur ami du dev React Paris.js #55 // @phacks Hot reloading ! 👌 Visualisation du state tree en temps réel ! 👏
  • 7. Redux, le meilleur ami du dev React Paris.js #55 // @phacks Hot reloading ! 👌 Visualisation du state tree en temps réel ! 👏 Un debugger qui voyage dans le temps ! 🎉
  • 8. Redux, une machine à états Paris.js #55 // @phacks
  • 9. Redux, une machine à états Paris.js #55 // @phacks
  • 10. Les composants UI React avec Redux Paris.js #55 // @phacks render() { // … return <li className={itemClass}> <div className="view"> <input type="checkbox" className="toggle" defaultChecked={this.props.isCompleted} onClick={() => this.props.toggleComplete(this.props.id)} /> <label htmlFor="todo" ref="text" onDoubleClick={() => this.props.editItem(this.props.id)}> {this.props.text} </label> <button className="destroy" onClick={() => this.props.deleteItem(this.props.id)}></button> </div> </li> } }; Rien dans les mains, tout dans les props !
  • 11. Les Actions Paris.js #55 // @phacks export function toggleComplete(itemId) { return { type: 'TOGGLE_COMPLETE', itemId } } export function deleteItem(itemId) { return { type: 'DELETE_ITEM', itemId } } Une structure de données JSON normalisée
  • 12. Les Reducers Paris.js #55 // @phacks function toggleComplete(state, itemId) { const itemIndex = state.get('todos').findIndex( (item) => item.get('id') === itemId ); const updatedItem = state.get('todos') .get(itemIndex) .update('status', status => status === 'active' ? 'completed' : 'active'); return state.update('todos', todos => todos.set(itemIndex, updatedItem)); } export default function(state = Map(), action) { switch (action.type) { case 'TOGGLE_COMPLETE': return toggleComplete(state, action.itemId); } return state; } Pures fonctions : (state, action) ! newState Implémentent la logique applicative
  • 13. Pourquoi choisir Redux ? Paris.js #55 // @phacks Un debugger qui fait aimer le debugging ❤ Le pattern force à structurer clairement son app Tests unitaires simple à mettre en place et découplés (UI d’un côté, logique de l’autre) Compatible React Native, Angular 1 & 2, VueJS…
  • 14. Ressources Paris.js #55 // @phacks Mon tutoriel TodoMVC : bit.ly/1SDK1G2 Realtime app, Redux en front & back : bit.ly/1W1adrS Un clone de Trello avec Redux & Phoenix : bit.ly/1YNekZh
  • 15. Merci ! 🤗 Questions ? Paris.js #55 // @phacks