Recientemente decidí cambiar mi código de clase a componentes funcionales. Estoy usando redux, axios y axiosMiddleware. Desde que comencé a cambiar a componentes funcionales noté algo extraño. Vea el siguiente ejemplo, que es una solicitud que usa un envío (estoy usando connect y mapDispatchToProps):
const getUserActivity = () => { await props .get(displayDateString) .then((response) => { console.log(response); //prints response console.log(props.activity); //prints part of the redux that should be updated }) .catch((error) => console.log('error ' + error)); } const mapDispatchToProps = (dispatch) => ({ get: (date) => dispatch(ActivityReportActions.get(date)) })Mi problema aquí es que cuando recibo la respuesta después de "entonces", el redux no se actualiza de inmediato, solo después. "console.log(props.activity)" imprime el estado anterior y, en algunos casos, prefiero acceder al redux justo después de la respuesta. ¿Alguien tiene alguna idea de por qué sucede esto en los componentes funcionales y no en los componentes de clase? En caso afirmativo, ¿hay alguna solución que no requiera el uso de useEffect()?
¡Gracias!
Es imposible leer nuevos valores de accesorios inmediatamente después del envío. React aún no ha tenido la oportunidad de volver a renderizar.
Si necesita leer el estado más reciente inmediatamente después de un envío, deberá escribir la lógica como un procesador, que tiene acceso a getState :
https://redux.js.org/usage/writing-logic-thunks#accessing-state