Passei pelas definições dos dois como:
Funções puras são aquelas que não tentam alterar suas entradas e sempre retornam o mesmo resultado para as mesmas entradas.
Exemplo
function sum(a, b) {
return a + b;
}
E a função Impura é aquela que altera sua própria entrada.
Exemplo
function withdraw(account, amount) {
account.total -= amount;
}
Definições e snippets de código extraídos dos documentos oficiais do ReactJs .
Agora, alguém pode me dizer, como posso cometer alguns erros no React / Redux , para usar funções impuras onde são necessárias funções puras?
javascript
reactjs
redux
MuhammadUmarFarooq
fonte
fonte
window.getElementById
etc, portanto, executar a mesma função com os mesmos parâmetros pode ter resultados diferentes, dependendo dos efeitos colaterais. É aí que o redux falharia.Respostas:
Reagir e
Redux
ambos precisam de funções puras, aliadas à imutabilidade, para serem executadas de maneira previsível.Se você não seguir essas duas coisas, seu aplicativo terá bugs, sendo o mais comum
React/Redux
não conseguir rastrear as alterações e não conseguir renderizá- las novamente novamentestate/prop
.Em termos de React, considere o seguinte exemplo:
O estado é mantido pelo objeto state, que apenas adicionou propriedade. Este aplicativo renderiza a propriedade do aplicativo. Ele nem sempre deve renderizar o estado quando algo acontece, mas deve verificar se ocorreu uma alteração no objeto de estado.
Assim, temos uma função de efeitos,
pure function
que usamos para afetar nosso estado. Você vê que ele retorna um novo estado quando o estado deve ser alterado e retorna o mesmo estado quando nenhuma modificação é necessária.Também temos uma
shouldUpdate
função que verifica, usando o operador ===, se o estado antigo e o novo estado são iguais.Para cometer erros em termos de React, você pode realmente fazer o seguinte:
Você também pode cometer erros definindo o estado diretamente e não usando a
effects
função.O procedimento acima não deve ser feito e apenas a
effects
função deve ser usada para atualizar o estado.Em termos de Reagir, nós chamamos
effects
comosetState
.Para Redux:
combineReducers
utilitário do Redux verifica alterações de referência.connect
método React-Redux gera componentes que verificam as alterações de referência para o estado raiz e os valores de retorno dasmapState
funções para verificar se o componente empacotado realmente precisa ser renderizado novamente.pure functions
não tenha efeitos colaterais, para que você possa saltar corretamente entre diferentes estados.Você pode violar facilmente os três acima usando funções impuras como redutores.
O seguinte é obtido diretamente dos documentos do redux:
É chamado de redutor porque é o tipo de função para a qual você passaria
Array.prototype.reduce(reducer, ?initialValue)
.É muito importante que o redutor permaneça puro. Coisas que você nunca deve fazer dentro de um redutor:
Dados os mesmos argumentos, ele deve calcular o próximo estado e retorná-lo. Sem surpresas. Sem efeitos colaterais. Nenhuma chamada de API. Sem mutações. Apenas um cálculo.
fonte
Simplesmente disse que o estado não pode ser modificado. Uma nova instância do estado deve ser retornada toda vez que houver uma alteração, para
Este código não está correto:
Este código, quando escrito como uma função pura abaixo, retorna uma nova instância da matriz que não modifica a própria matriz real. Esta é a razão pela qual você deve usar uma biblioteca como o immer para lidar com a imutabilidade
fonte
Você pode tornar impuras as funções puras adicionando chamadas à API ou escrevendo códigos que resultam em efeitos colaterais.
As funções puras devem sempre ser objetivas e auto-explicativas, e não exigir que você indique 3 ou 4 outras funções para entender o que está acontecendo.
Em caso de React / Redux
Isso não deve ser feito . Tudo o que uma função de conexão ou função redutora precisa ser fornecida por meio de argumento ou escrito em sua função. Nunca deve sair de fora.
fonte