Estoy activando una función en saga con Dispatch. ¿Puede Saga enviarme información dentro del componente después de que haya hecho todo su trabajo? En realidad, explicaré lo que quiero hacer con un ejemplo simple, no se rían, por favor, estoy seguro de que esto no funcionará.
dispatch({ type: 'triggerApiCallInSaga' }).then(res => doSomething(res.payload));Quiero hacer cambios en el componente como resultado de la consulta que he hecho. De hecho, quiero mantener esto con redux, pero me preocupa que mi estado se expanda. También me parece una tontería verificar a través de redux para cerrar el modal.
En resumen quiero recibir señal de saga y verla en componente. ¿Puedo hacer un oyente para ello? ¿O la saga tiene un método para esto? Aunque busqué, no pude encontrar los resultados correctos. devolución de llamada de redux-sagas (también conocido como sagas y setState) Encontré una pregunta similar a mi pregunta, pero aquí encontré una respuesta negativa que no entendí.
Gracias.
La respuesta que vinculó es correcta, la forma esperada para que una saga se comunique con el componente es mediante la actualización de la tienda redux. Agregar promesas/devoluciones de llamada es un antipatrón, porque cada acción puede ser manejada por sagas 0-n; por supuesto, es posible que sepa que en su caso es solo una saga, pero el marco no garantiza eso de ninguna manera y puede conducir a algunos problemas inesperados más adelante.
Dicho esto, aunque sea un antipatrón no significa que no puedas hacerlo.
La forma más fácil es agregar una devolución de llamada a la acción, por ejemplo
// component const callback = data => console.log(data) dispatch({type: MY_ACTION, callback}) // saga yield takeEvery(MY_ACTION, function*(action) { action.callback({foo: 'bar'}); })Si prefiere promesas, eso es algo que no se puede hacer fácilmente solo con la biblioteca de saga, pero hay paquetes que pueden agregar esta funcionalidad como: https://github.com/adobe/redux-saga-promise
La solución ideal para este problema sería ejecutar una saga sobre un useReducer , de modo que en lugar de agregar un estado específico del componente a la tienda redux, solo trabajaría con un estado del componente. Hay algunos intentos que intentan hacer esto, pero desafortunadamente, a Reaction aún le falta alguna funcionalidad que nos permita hacer esto de manera confiable sin introducir otros problemas.