Chicos, estoy trabajando en la aplicación meteorológica y lucho con useState asíncrono. He leído en stackoverflow que se puede resolver con devolución de llamada en la función useState. Así que lo probé pero nada cambió. El problema es que cuando hago clic en el botón Enviar, el estado debe recibir datos de la API, pero no lo hace y obtengo un valor nulo en mi estado. ¿Qué está mal? Si puede, por favor ayúdeme de acuerdo con mi código. PD perdió algunas funciones que no son importantes
const useForecast = () => { const [forecast, setForecast] = useState(null); const gatherForecastData = async data => { const currentDay = await getCurrentDayForecast(data.consolidated_weather[0], data.title); const currentDayDetails = await getCurrentDayDetailedForecast(data.consolidated_weather[0]); await setForecast(() => { return { currentDay, currentDayDetails}; }); setLoading(false); }; // MAIN FUNC AND TROUBLE IS HERE const submitRequest = async location => { setLoading(true); setError(false); const response = await getWoeid(location); if (!response?.woeid) return; const data = await getForecastData(response.woeid); if (!data) return; await gatherForecastData(data); console.log(data); // DATA SHOWS OK console.log(forecast); // SHOWS INITIAL STATE FOR THE FIRST SUBMIT }; }useState es síncrono, también, debe pasar los valores que desee, en este caso el objeto
{ día actual, detalles del día actual}
, por lo que estas líneas
await setForecast(() => { return { currentDay, currentDayDetails}; });debiera ser
setForecast({ currentDay, currentDayDetails});