Enhance Web Development
Angular 2
Les opérations immutables
- Pourquoi Immutable ?
- Eviter les mutations de collections
- Eviter les mutations d'objets
- Les méthodes/lib utiles !
Pourquoi Immutable ?
- Simplifie drastiquement le développement d'application
- Plus besoin de faire un "snapshot" au cas où
- La memoization avancée est possible
- Meilleurs détection de changement
- Plus facile à tester !
Eviter les mutations
- Array.concat
- Array.splice
- ...spread
- Array.map
- Array.filter
- Object.assign
Eviter les mutations
export const items = (state: any = [], {type, payload}) => {
switch (type) {
case 'ADD_ITEMS':
return payload
case 'CREATE_ITEM':
return [...state, payload]
case 'UPDATE_ITEM':
return state.map(item => {
return item.id === payload.id ? Object.assign({}, item, payload) : item
})
case 'DELETE_ITEM':
return state.filter(item => {
return item.id !== payload.id
})
default:
return state
}
}
Eviter les mutations
export const items = (state: any = [], {type, payload}) => {
switch (type) {
case 'ADD_ITEMS':
return payload
case 'CREATE_ITEM':
return [...state, payload]
case 'UPDATE_ITEM':
return state.map(item => {
return item.id === payload.id ? Object.assign({}, item, payload) : item
})
case 'DELETE_ITEM':
return state.filter(item => {
return item.id !== payload.id
})
default:
return state
}
}
Eviter les mutations
export const items = (state: any = [], {type, payload}) => {
switch (type) {
case 'ADD_ITEMS':
return payload
case 'CREATE_ITEM':
return [...state, payload]
case 'UPDATE_ITEM':
return state.map(item => {
return item.id === payload.id ? Object.assign({}, item, payload) : item
})
case 'DELETE_ITEM':
return state.filter(item => {
return item.id !== payload.id
})
default:
return state
}
}
Les méthodes/lib utiles !
- Object.freeze
- deep-freeze
- eslint-plugin-immutable
- Immutable.js
- Ramda.js
Object.freeze
- Cette méthode freeze un objet !
- Prévient l'ajout de nouvelle propriété, de la suppression et de la modification de celle existante
- Retourne l'objet freeze
deep-freeze
- Un projet pour appliquer un Object.freeze() de façon récursive
eslint-plugin-immutable
- Un plugin ESLint qui permet de désactiver/activer toutes les warning/erreur sur les code assujetis à des mutations
Immutable.js & Ramda.js
- Des librairies qui permettent de facilement mettre en place un écosystème immutable
- ImmutableJS (facebook)
- RamdaJS
Angular 2 - Immutable Operations
By Benjamin LONGEARET
Angular 2 - Immutable Operations
- 837