He revisado las definiciones de los dos como:
Las funciones puras son aquellas que no intentan cambiar sus entradas y siempre devuelven el mismo resultado para las mismas entradas.
Ejemplo
function sum(a, b) {
return a + b;
}
Y la función Impura es aquella que cambia su propia entrada.
Ejemplo
function withdraw(account, amount) {
account.total -= amount;
}
Definiciones y fragmentos de código tomados de los documentos oficiales de ReactJs .
Ahora, ¿alguien puede decirme, cómo puedo cometer algunos errores en React / Redux , para usar funciones impuras donde se requieren funciones puras?
javascript
reactjs
redux
MuhammadUmarFarooq
fuente
fuente
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.Respuestas:
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 renderizarlosstate/prop
.En términos de React, considere el siguiente ejemplo:
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:
También puede cometer errores configurando el estado directamente y no utilizando la
effects
función.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
comosetState
.Para Redux:
combineReducers
utilidad de Redux busca cambios de referencia.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 lasmapState
funciones para ver si el componente envuelto realmente necesita volver a renderizarse.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:
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.
fuente
Simplemente dijo que el estado no puede ser mutado. Se debe devolver una nueva instancia del estado cada vez que haya un cambio.
Este código no es correcto:
Este código, cuando se escribe como una función pura a continuación, devuelve una nueva instancia de la matriz, no modifica la matriz real en sí. Esta es la razón por la que debería usar una biblioteca como immer para manejar la inmutabilidad
fuente
Puede hacer impuras las funciones puras agregando llamadas API o escribiendo códigos que provoquen efectos secundarios.
Las funciones puras siempre deben ser puntuales y se explican por sí mismas, y no deben requerir que refieras otras 3 o 4 funciones para comprender lo que está sucediendo.
En caso de React / Redux
Esto no debe hacerse . Todo lo que necesita una función de conexión o una función reductora debe ser suministrado a través de argumentos o escrito dentro de su función. Nunca debería llegar desde afuera.
fuente