Reaccionan y Redux
ambos necesitan funciones puras junto con la inmutabilidad para ejecutarse de manera predecible.
Si no sigue estas dos cosas, su aplicación tendrá errores, el más común React/Redux
no podrá rastrear los cambios y no podrá volver a renderizarlos state/prop
.
En términos de React, considere el siguiente ejemplo:
let state = {
add: 0,
}
function render() {
//...
}
//pure function
function effects(state,action) {
//following immutability while updating state, not directly mutating the state.
if(action == 'addTen') {
return {...state, add: state.add + 10}
}
return state;
}
function shouldUpdate(s) {
if(s === state){
return false
}
return true
}
state = effects(state, 'addTen')if(shouldUpdate(state)) {
render();
}
El estado lo retiene el objeto de estado que solo ha agregado propiedad. Esta aplicación representa la propiedad de la aplicación. No siempre debe representar el estado cuando sucede algo, pero debe verificar si se produjo un cambio en el objeto de estado.
De esta manera, tenemos una función de efectos, pure function
que usamos para afectar nuestro estado. Verá que devuelve un nuevo estado cuando se va a cambiar el estado y devuelve el mismo estado cuando no se requiere ninguna modificación.
También tenemos una shouldUpdate
función que verifica con el operador === si el estado anterior y el nuevo son los mismos.
Para cometer errores en términos de React, puedes hacer lo siguiente:
function effects(state,action) {
doRandom(); // effects should only be called for updating state.
// Doing any other stuff here would make effects impure.
if(action == 'addTen') {
return {...state, add: state.add + 10}
}
return state;
}
También puede cometer errores configurando el estado directamente y no utilizando la effects
función.
function doMistake(newValue) {
this.state = newValue
}
Lo anterior no se debe hacer y solo se effects
debe usar la función para actualizar el estado.
En términos de React, llamamos effects
como setState
.
Para Redux:
- La
combineReducers
utilidad de Redux busca cambios de referencia.
- El
connect
método React-Redux genera componentes que verifican los cambios de referencia tanto para el estado raíz como para los valores de retorno de las mapState
funciones para ver si el componente envuelto realmente necesita volver a renderizarse.
- La depuración del viaje en el tiempo requiere que el reductor no tenga
pure functions
efectos secundarios para que pueda saltar correctamente entre diferentes estados.
Puede violar fácilmente los tres anteriores utilizando funciones impuras como reductores.
Lo siguiente se toma directamente de los documentos de redux:
Se llama reductor porque es el tipo de función a la que pasaría Array.prototype.reduce(reducer, ?initialValue)
.
Es muy importante que el reductor se mantenga puro. Cosas que nunca debes hacer dentro de un reductor:
Mutate its arguments;
Perform side effects like API calls and routing transitions;
Call non-pure functions, e.g. Date.now() or Math.random().
Dados los mismos argumentos, debe calcular el siguiente estado y devolverlo. No hay sorpresas. Sin efectos secundarios. No hay llamadas de API. Sin mutaciones Solo un calculo.
window.getElementById
etc., por lo que ejecutar la misma función con los mismos parámetros puede tener resultados diferentes dependiendo de los efectos secundarios. Que es donde fallaría redux.