Vou migrar para o Redux.
Meu aplicativo consiste em várias partes (páginas, componentes), por isso quero criar muitos redutores. Exemplos de redux mostram que eu deveria usar combineReducers()
para gerar um redutor.
Além disso, como eu entendo, o aplicativo Redux deve ter um armazenamento e é criado assim que o aplicativo é iniciado. Quando a loja estiver sendo criada, devo passar meu redutor combinado. Isso faz sentido se o aplicativo não for muito grande.
Mas e se eu criar mais de um pacote JavaScript? Por exemplo, cada página do aplicativo possui seu próprio pacote. Eu acho que, neste caso, o redutor combinado não é bom. Procurei nas fontes do Redux e encontrei replaceReducer()
funções. Parece ser o que eu quero.
Eu poderia criar um redutor combinado para cada parte do meu aplicativo e usá-lo replaceReducer()
quando me mover entre partes do aplicativo.
Será esta uma boa abordagem?
fonte
/homepage
e, em seguida, mais desse ramo é carregado quando o usuário acessaprofile.
um exemplo. fazer isso, seria incrível. Caso contrário, eu tenho um tempo difícil achatando minha árvore do estado ou eu tenho que têm nomes de filiais muito específicasuser-permissions
euser-personal
É assim que eu o implementei em um aplicativo atual (com base no código de Dan de um problema do GitHub!)
Crie uma instância do registro ao inicializar seu aplicativo, passando redutores que serão incluídos no pacote de entrada:
Em seguida, ao configurar o armazenamento e as rotas, use uma função à qual você pode atribuir o registro do redutor:
Onde essas funções se parecem com:
Aqui está um exemplo básico ao vivo, criado com essa configuração e sua fonte:
Ele também cobre a configuração necessária para permitir o recarregamento a quente de todos os seus redutores.
fonte
Agora existe um módulo que adiciona redutores de injeção no repositório redux. É chamado Redux Injector .
Aqui está como usá-lo:
Não combine redutores. Em vez disso, coloque-os em um objeto (aninhado) de funções como faria normalmente, mas sem combiná-los.
Use createInjectStore do redux-injector em vez de createStore do redux.
Injete novos redutores com injectReducer.
Aqui está um exemplo:
Divulgação completa: Eu sou o criador do módulo.
fonte
Em outubro de 2017:
Reedux
implementa o que Dan sugeriu e nada mais, sem tocar sua loja, seu projeto ou seus hábitos
Também existem outras bibliotecas, mas elas podem ter muitas dependências, menos exemplos, uso complicado, são incompatíveis com alguns middlewares ou exigem que você reescreva seu gerenciamento de estado. Copiado da página de introdução do Reedux:
fonte
Lançamos uma nova biblioteca que ajuda a modular um aplicativo Redux e permite adicionar / remover dinamicamente redutores e middlewares.
Consulte https://github.com/Microsoft/redux-dynamic-modules
Os módulos oferecem os seguintes benefícios:
Os módulos podem ser facilmente reutilizados no aplicativo ou entre vários aplicativos similares.
Os componentes declaram os módulos necessários por eles e redux-dynamic-modules garante que o módulo seja carregado para o componente.
Recursos
Cenários de exemplo
fonte
Aqui está outro exemplo com divisão de código e lojas redux, bastante simples e elegante na minha opinião. Eu acho que pode ser bastante útil para quem está procurando uma solução funcional.
Esta loja é um pouco simplificada, não força você a ter um espaço para nome (reducer.name) em seu objeto de estado, é claro que pode haver uma colisão com nomes, mas você pode controlar isso criando uma convenção de nomenclatura para seus redutores e deve ficar bem.
fonte