Eu li essa resposta , reduzindo o padrão , olhei para alguns exemplos do GitHub e até tentei reduxar um pouco (todos os aplicativos).
Pelo que entendi, as motivações oficiais de documentos redux fornecem profissionais comparando com as arquiteturas MVC tradicionais. MAS não fornece uma resposta para a pergunta:
Por que você deve usar o Redux sobre o Facebook Flux?
Isso é apenas uma questão de estilos de programação: funcional versus não funcional? Ou a questão está nas habilidades / ferramentas de desenvolvimento que seguem a abordagem redux? Talvez escalando? Ou testando?
Estou certo se eu disser que redux é um fluxo para pessoas que vêm de linguagens funcionais?
Para responder a essa pergunta, você pode comparar a complexidade dos pontos de motivação do redux de implementação no fluxo versus redux.
Aqui estão os pontos de motivação das motivações oficiais do redux doc :
- Lidar com atualizações otimistas ( como eu entendo, dificilmente depende do quinto ponto. É difícil implementá-lo no fluxo do facebook? )
- Renderização no servidor (o fluxo do facebook também pode fazer isso. Algum benefício em comparação ao redux? )
- Buscando dados antes de realizar transições de rota ( por que não podem ser alcançados no fluxo do facebook? Quais são os benefícios? )
- Recarga a quente ( é possível com o React Hot Reload . Por que precisamos de redux? )
- Desfazer / Refazer funcionalidade
- Algum outro ponto? Como estado persistente ...
Respostas:
Autor Redux aqui!
Redux não é isso diferente de Flux. No geral, possui a mesma arquitetura, mas o Redux é capaz de reduzir alguns aspectos da complexidade usando a composição funcional, onde o Flux usa o registro de retorno de chamada.
Não há uma diferença fundamental no Redux, mas acho que isso torna algumas abstrações mais fáceis, ou pelo menos possíveis de implementar, que seriam difíceis ou impossíveis de implementar no Flux.
Composição do redutor
Tome, por exemplo, paginação. Meu exemplo do Flux + React Router lida com paginação, mas o código para isso é horrível. Uma das razões pelas quais é horrível é que o Flux torna natural reutilizar a funcionalidade nas lojas. Se duas lojas precisarem lidar com paginação em resposta a ações diferentes, elas precisam herdar de uma loja base comum (ruim! Você está se trancando em um design específico ao usar herança) ou chamar uma função definida externamente de dentro do diretório manipulador de eventos, que precisará operar de alguma forma no estado privado da loja Flux. A coisa toda é confusa (embora definitivamente no reino do possível).
Por outro lado, a paginação com Redux é natural graças à composição do redutor. São redutores até o fim, para que você possa escrever uma fábrica de redutores que gere redutores de paginação e depois usá-los em sua árvore de redutores . A chave para o fato de ser tão fácil é porque, no Flux, as lojas são simples, mas no Redux, os redutores podem ser aninhados por meio da composição funcional, assim como os componentes do React podem ser aninhados.
Esse padrão também permite recursos maravilhosos como desfazer / refazer código sem usuário . Você pode imaginar conectar Undo / Redo em um aplicativo Flux sendo duas linhas de código? Dificilmente. Com o Redux, é novamente, graças ao padrão de composição do redutor. Eu preciso destacar que não há nada de novo nisso - esse é o padrão pioneiro e descrito em detalhes na Elm Architecture, que foi influenciada pelo Flux.
Renderização do servidor
As pessoas estão processando bem no servidor com o Flux, mas, vendo que temos 20 bibliotecas do Flux tentando facilitar a renderização do servidor, talvez o Flux tenha algumas arestas no servidor. A verdade é que o Facebook não faz muita renderização de servidores, então eles não se preocuparam muito com isso e confiam no ecossistema para facilitar.
No Flux tradicional, as lojas são singletons. Isso significa que é difícil separar os dados para diferentes solicitações no servidor. Não é impossível, mas difícil. É por isso que a maioria das bibliotecas do Flux (assim como os novos Flux Utils ) agora sugerem o uso de classes em vez de singletons, para que você possa instanciar lojas por solicitação.
Ainda existem os seguintes problemas que você precisa resolver no Flux (você mesmo ou com a ajuda da sua biblioteca favorita do Flux, como Flummox ou Alt ):
É certo que as estruturas do Flux (não o Flux de baunilha) têm soluções para esses problemas, mas eu as acho complicadas demais. Por exemplo, o Flummox pede para você implementar
serialize()
edeserialize()
em suas lojas . Alt resolve isso melhor, fornecendotakeSnapshot()
que serializa automaticamente seu estado em uma árvore JSON.O Redux vai além: como existe apenas uma loja (gerenciada por muitos redutores), você não precisa de nenhuma API especial para gerenciar a (re) hidratação. Você não precisa "liberar" ou "hidratar" as lojas - há apenas uma loja e você pode ler o estado atual ou criar uma nova loja com um novo estado. Cada solicitação obtém uma instância de armazenamento separada. Leia mais sobre renderização de servidor com Redux.
Novamente, esse é um caso de algo possível, tanto no Flux quanto no Redux, mas as bibliotecas do Flux resolvem esse problema introduzindo uma tonelada de API e convenções, e o Redux nem precisa resolvê-lo porque não tem esse problema no primeiro lugar graças à simplicidade conceitual.
Experiência do desenvolvedor
Na verdade, eu não pretendia que o Redux se tornasse uma biblioteca popular do Flux - escrevi enquanto trabalhava na minha palestra ReactEurope sobre recarregar as baterias com viagens no tempo . Eu tinha um objetivo principal: tornar possível alterar o código do redutor em tempo real ou até "mudar o passado", cruzando ações e ver o estado sendo recalculado.
Não vi uma única biblioteca do Flux capaz de fazer isso. O React Hot Loader também não permite que você faça isso - na verdade, ele quebra se você editar as lojas Flux porque não sabe o que fazer com elas.
Quando o Redux precisa recarregar o código do redutor, ele chama
replaceReducer()
e o aplicativo é executado com o novo código. No Flux, dados e funções são emaranhados nos repositórios do Flux, então você não pode “simplesmente substituir as funções”. Além disso, você teria que, de alguma forma, registrar novamente as novas versões com o Dispatcher - algo que o Redux nem tem.Ecossistema
O Redux possui um ecossistema rico e de rápido crescimento . Isso ocorre porque ele fornece alguns pontos de extensão, como middleware . Ele foi projetado com casos de uso, como registro em log , suporte a promessas , observáveis , roteamento , verificações de desenvolvimento de imutabilidade , persistência etc., em mente. Nem todas serão úteis, mas é bom ter acesso a um conjunto de ferramentas que podem ser facilmente combinadas para trabalhar em conjunto.
Simplicidade
O Redux preserva todos os benefícios do Flux (gravação e reprodução de ações, fluxo de dados unidirecional, mutações dependentes) e adiciona novos benefícios (fácil desfazer refazer, recarregar a quente) sem introduzir o Dispatcher e o registro da loja.
Mantê-lo simples é importante, pois mantém você saudável enquanto implementa abstrações de nível superior.
Diferente da maioria das bibliotecas Flux, a superfície da API Redux é pequena. Se você remover os avisos, comentários e verificações de integridade do desenvolvedor, são 99 linhas . Não há código assíncrono complicado para depurar.
Você pode realmente ler e entender todo o Redux.
Veja também minha resposta sobre as desvantagens de usar o Redux comparado ao Flux .
fonte
${login}/${name}
) Muito obrigado!No Quora, alguém diz :
Além disso, este diagrama visual que eu criei para mostrar uma visão rápida de ambos, provavelmente uma resposta rápida para as pessoas que não querem ler a explicação completa:
Mas se você ainda estiver interessado em saber mais, continue lendo.
Dos documentos do Redux :
Também dos documentos do Redux :
fonte
Você pode começar melhor lendo este post de Dan Abramov, onde ele discute várias implementações do Flux e suas vantagens e desvantagens no momento em que ele escrevia o redux: The Evolution of Flux Frameworks
Em segundo lugar, a página de motivações a que você vincula realmente não discute tanto as motivações do Redux quanto as motivações por trás do Flux (e do React). Os Três Princípios são mais específicos do Redux, embora ainda não lidem com as diferenças de implementação da arquitetura padrão do Flux.
Basicamente, o Flux possui vários repositórios que calculam as alterações de estado em resposta às interações da interface do usuário / API com os componentes e transmitem essas alterações como eventos nos quais os componentes podem se inscrever. No Redux, há apenas um armazenamento no qual cada componente assina. Na IMO, parece que o Redux simplifica e unifica ainda mais o fluxo de dados unificando (ou reduzindo, como Redux diria) o fluxo de dados de volta aos componentes - enquanto o Flux se concentra na unificação do outro lado do fluxo de dados - veja modelo.
fonte
Sou um dos primeiros a adotar e implementei um aplicativo de página única de tamanho médio usando a biblioteca do Facebook Flux.
Como estou um pouco atrasado para a conversa, apenas aponto que, apesar das minhas melhores esperanças, o Facebook parece considerar a implementação do Flux uma prova de conceito e nunca recebeu a atenção que merece.
Eu o encorajo a brincar com ele, pois expõe mais do trabalho interno da arquitetura Flux, que é bastante educacional, mas ao mesmo tempo não oferece muitos dos benefícios que bibliotecas como o Redux oferecem (que não são importante para projetos pequenos, mas se torna muito valioso para projetos maiores).
Decidimos que, seguindo em frente, mudaremos para o Redux e sugiro que você faça o mesmo;)
fonte
Aqui está a explicação simples do Redux sobre o Flux. O Redux não possui um despachante, ele depende de funções puras chamadas redutores. Não precisa de um despachante. Cada ação é manipulada por um ou mais redutores para atualizar o armazenamento único. Como os dados são imutáveis, os redutores retornam um novo estado atualizado que atualiza o armazenamento
Para mais informações: Flux vs Redux
fonte
Eu trabalhei bastante tempo com o Flux e agora bastante tempo usando o Redux. Como Dan apontou, as duas arquiteturas não são tão diferentes. O problema é que o Redux torna as coisas mais simples e limpas. Ele ensina algumas coisas sobre o Flux. Como por exemplo, o Flux é um exemplo perfeito de fluxo de dados unidirecional. Separação de preocupações em que temos dados, suas manipulações e camadas de visualização separadas. No Redux, temos as mesmas coisas, mas também aprendemos sobre imutabilidade e funções puras.
fonte
De um novo adotante react / redux migrando do (alguns anos) do ExtJS em meados de 2018:
Depois de deslizar para trás na curva de aprendizado do redux, tive a mesma pergunta e pensei que o fluxo puro seria mais simples como o OP.
Logo vi os benefícios do redux sobre o fluxo, conforme observado nas respostas acima, e estava trabalhando no meu primeiro aplicativo.
Enquanto controlava a placa da caldeira novamente, experimentei algumas das outras bibliotecas de gerenciamento de estado, o melhor que encontrei foi revanche .
Foi muito mais intuitivo que o redux de baunilha, cortava 90% do padrão e cortava 75% do tempo que gastava em redux (algo que acho que uma biblioteca deveria estar fazendo), consegui alguns aplicativos corporativos indo imediatamente.
Também roda com as mesmas ferramentas de redux. Este é um bom artigo que cobre alguns dos benefícios.
Portanto, para qualquer pessoa que chegou a este post do SO pesquisando "redux mais simples", recomendo experimentá-lo como uma alternativa simples ao redux com todos os benefícios e 1/4 do clichê.
fonte
De acordo com este artigo: https://medium.freecodecamp.org/a-realworld-comparison-of-front-end-frameworks-with-benchmarks-2019-update-4be0d3c78075
É melhor usar o MobX para gerenciar os dados em seu aplicativo para obter um melhor desempenho, não o Redux.
fonte