Tengo un reductor para Clientes, otro para AppToolbar y algunos otros ...
Ahora digamos que creé una acción de recuperación para eliminar el cliente, y si falla, tengo un código en el reductor de Clientes que debería hacer algunas cosas, pero también quiero mostrar algún error global en AppToolbar.
Pero los reductores Clients y AppToolbar no comparten la misma parte del estado y no puedo crear una nueva acción en el reductor.
Entonces, ¿cómo se supone que debo mostrar un error global? Gracias
ACTUALIZACIÓN 1:
Olvidé mencionar que uso este devstack
ACTUALIZACIÓN 2: Marqué la respuesta de Eric como correcta, pero tengo que decir que la solución que estoy usando en este es más como una combinación de la respuesta de Eric y Dan ... Solo tienes que encontrar lo que mejor se adapte a ti en tu código ... .
fuente
Respuestas:
Si desea tener el concepto de "errores globales", puede crear un
errors
reductor, que puede escuchar las acciones addError, removeError, etc ... Luego, puede conectarse a su árbol de estado de Redux enstate.errors
y mostrarlos donde sea apropiado.Hay varias formas de abordar esto, pero la idea general es que los errores / mensajes globales merecerían su propio reductor para vivir completamente separados de
<Clients />
/<AppToolbar />
. Por supuesto, si cualquiera de estos componentes necesita accesoerrors
, puede pasarloserrors
como un accesorio donde sea necesario.Actualización: ejemplo de código
Aquí hay un ejemplo de cómo se vería si pasara los "errores globales"
errors
a su nivel superior<App />
y lo renderizara condicionalmente (si hay errores presentes). Usando react-redux'sconnect
para conectar su<App />
componente a algunos datos.Y en lo que respecta al creador de la acción, enviaría ( redux-thunk ) el error de éxito de acuerdo con la respuesta
Si bien su reductor podría simplemente administrar una serie de errores, agregando / eliminando entradas de manera adecuada.
fuente
catch
llamen funciones sisomeHttpClient.get('/resources')
o lasfetch('/resources')
que uso en mi devolución de código500 Server Error
. ¿Tiene algún pensamiento en la parte superior de su cabeza donde podría estar cometiendo un error? Esencialmente, lo que hago esfetch
enviar una solicitud que termina con miroutes
en el que llamo a un método en mimongoose
modelo para hacer algo muy simple, como agregar un texto o eliminar un texto de la base de datos.La respuesta de Erik es correcta, pero me gustaría agregar que no tiene que disparar acciones separadas para agregar errores. Un enfoque alternativo es tener un reductor que maneje cualquier acción con un
error
campo . Este es un asunto de elección y convención personal.Por ejemplo, del ejemplo de Redux
real-world
que tiene manejo de errores:fuente
error
carga útil de la acción. ¡Gracias Dan!El enfoque que estoy tomando actualmente para algunos errores específicos (validación de entrada del usuario) es hacer que mis sub-reductores lancen una excepción, la capturen en mi reductor raíz y la adjunten al objeto de acción. Luego tengo un redux-saga que inspecciona los objetos de acción en busca de un error y actualiza el árbol de estado con datos de error en ese caso.
Entonces:
Y luego agregar el error al árbol de estado es como lo describe Erik.
Lo uso con bastante moderación, pero evita que tenga que duplicar la lógica que pertenece legítimamente al reductor (para que pueda protegerse de un estado no válido).
fuente
escriba Middleware personalizado para manejar todos los errores relacionados con la API. En este caso, su código será más limpio.
fuente
if
en un reductorlo que hago es centralizar todo el manejo de errores en el efecto por efecto
fuente
Puede utilizar el cliente HTTP axios. Ya ha implementado la función Interceptores. Puede interceptar solicitudes o respuestas antes de que se manejen o se detecten.
https://github.com/mzabriskie/axios#interceptors
fuente