En este lunch & learn Eduardo nos presentará Redux, una forma de crear contenedores de estados predecibles para aplicaciones JavaScrip. También nos habla de @barcitomx , problemas y soluciones. ¡Esperamos que lo disfrutes!
23. ACTION CREATOR
‣ Todos los cambios son
iniciados por acciones
‣ Da formato al mensaje para
que el sistema lo entienda.
24. STORE
‣ Guarda todo el estado.
‣ Hay una y solo una. (≠ Flux)
‣ Hace el dispatching. (≠ Flux)
‣ El estado es inmutable
25. REDUCERS
‣ La Store les pregunta cómo una
acción cambia el estado
‣ El root reducer envía los
cachitos de estado a su
respectivo reducer
‣ Todos los cambios son
realizados en una copia
26. VIEWS
‣ Smart & Dumb components.
‣ Smart: A cargo de las acciones.
‣ Smart: Muchas veces no
generan DOM. Sólo realizan la
lógica.
27. VIEW LAYER BINDING
‣ Conecta el Store a los Views
‣ react-redux
‣ Provider
‣ connect()
‣ selector
28. ROOT COMPONENT
‣ Inicia todos los componentes.
‣ Crea la tienda.
‣ Le dice qué root reducer usar.
‣ Conecta las views y el view
layer binding.
29. PRINCIPIOS DE REDUX
‣ Solo hay un estado. Solo hay
una store.
‣ El estado es de solo lectura
‣ Los cambios son hechos con
funciones puras.
67. MIS ACTION CREATORS
export function fetchProducts(){
return function (dispatch) {
return sa.get(Barcito.domain + '/api/products')
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')
.end((err, res) => {
if (res.ok) {
dispatch(productsReceive(res.body));
} else {
console.log(res.body);
}
})
}
}
68. MIS ACTION CREATORS
export function productsReceive(products) {
return {
type: 'PRODUCTS_RECEIVE',
products
}
}
69. MIS ACTION CREATORS
export function increaseCart(itemID) {
return {
type: 'INCREASE_CART',
itemID
}
}
export function decreaseCart(itemID) {
return {
type: 'DECREASE_CART',
itemID
}
}
export function removeCart(itemID) {
return {
type: 'REMOVE_CART',
itemID
}
}
70. MIS REDUCERS
function cart(state = {}, action) {
switch (action.type) {
case 'INCREASE_CART':
...
case 'DECREASE_CART':
...
case 'REMOVE_CART':
...
case 'CLEAR_CART':
return {}
default:
return state;
}
}
71. MIS REDUCERS
case 'INCREASE_CART':
var newItem = {};
if (action.itemID in state) {
newItem[action.itemID] = state[action.itemID] + 1;
} else {
newItem[action.itemID] = 1;
}
return Object.assign({}, state, newItem);
72. ▸ Genero una acción que va a hacer el request al API
▸ Cuando el request regresa, se dispara una acción que va a
popular el store
AL INICIO DE LA APLICACIÓN