Tenho um redutor para clientes, outro para AppToolbar e alguns outros ...
Agora, digamos que eu criei uma ação fetch para excluir o cliente e, se ela falhar, eu tenho um código no redutor de clientes que deve fazer algumas coisas, mas também quero exibir algum erro global no AppToolbar.
Mas os redutores Clients e AppToolbar não compartilham a mesma parte do estado e não consigo criar uma nova ação no redutor.
Então, como devo mostrar o erro global? obrigado
ATUALIZAÇÃO 1:
Esqueci de mencionar que uso este devstack
ATUALIZAÇÃO 2: Eu marquei a resposta de Eric como correta, mas devo dizer que a solução que estou usando neste caso é mais como a combinação da resposta de Eric e Dan ... Você só precisa encontrar o que se encaixa melhor em seu código. .
fonte
Respostas:
Se você deseja ter o conceito de "erros globais", pode criar um
errors
redutor, que pode escutar as ações addError, removeError, etc .... Então, você pode conectar-se à árvore de estado do Redux emstate.errors
e exibi-los sempre que apropriado.Existem várias maneiras de abordar isso, mas a ideia geral é que erros / mensagens globais mereceriam seu próprio redutor para viverem completamente separados de
<Clients />
/<AppToolbar />
. Claro, se qualquer um desses componentes precisar de acesso,errors
você pode transmitierrors
-los como um suporte sempre que necessário.Atualização: Exemplo de Código
Aqui está um exemplo de como seria se você passasse os "erros globais"
errors
para o nível superior<App />
e os renderizasse condicionalmente (se houver erros). Usando react-redux'sconnect
para conectar seu<App />
componente a alguns dados.E no que diz respeito ao criador da ação, ele despacharia ( redux-thunk ) a falha de sucesso de acordo com a resposta
Embora seu redutor possa simplesmente gerenciar uma série de erros, adicionando / removendo entradas de forma adequada.
fonte
catch
funções sejam chamadas sesomeHttpClient.get('/resources')
oufetch('/resources')
que eu uso no meu retorno de código500 Server Error
. Você tem alguma ideia do topo da sua cabeça onde eu possa estar cometendo um erro? Essencialmente, o que faço éfetch
enviar um pedido que termina com meu,routes
em que chamo um método no meumongoose
modelo para fazer algo muito simples, como adicionar um texto ou remover um texto do banco de dados.A resposta de Erik está correta, mas eu gostaria de acrescentar que você não precisa disparar ações separadas para adicionar erros. Uma abordagem alternativa é ter um redutor que lida com qualquer ação com um
error
campo . É uma questão de escolha pessoal e convenção.Por exemplo, do exemplo Redux
real-world
que tem tratamento de erros:fonte
error
à carga útil da ação. Obrigado Dan!A abordagem que estou adotando atualmente para alguns erros específicos (validação de entrada do usuário) é fazer com que meus sub-redutores lançem uma exceção, capturem-na em meu redutor raiz e anexem-na ao objeto de ação. Então eu tenho uma saga redux que inspeciona objetos de ação em busca de um erro e atualiza a árvore de estado com dados de erro nesse caso.
Assim:
E adicionar o erro à árvore de estado é como Erik descreve.
Eu o uso com moderação, mas evita que eu tenha que duplicar a lógica que pertence legitimamente ao redutor (para que possa se proteger de um estado inválido).
fonte
escrever Middleware personalizado para lidar com todos os erros relacionados à API. Nesse caso, seu código ficará mais limpo.
fonte
if
em um redutoro que faço é centralizar todo o tratamento de erros no efeito por efeito
fonte
Você pode usar o cliente axios HTTP. Ele já implementou o recurso Interceptors. Você pode interceptar solicitações ou respostas antes que sejam tratadas até então ou capturadas.
https://github.com/mzabriskie/axios#interceptors
fonte