El estado aquí muestra una promesa cuando registro el resultado en la consola. ¿Cómo puedo acceder a la matriz dentro del resultado de la promesa? Probé Object.key y map pero nada funcionó
> import React, { useEffect, useState } from 'react'; import { > useDispatch, useSelector } from 'react-redux'; import { fetchStocks } > from '../Redux/stocks/stockreducer'; > > > > export const Home = () => { > > const dispatch = useDispatch(); useEffect(() => > dispatch(fetchStocks),[dispatch]); let result = useSelector((state) => > state.stocks); console.log(result) return ( > > <div> > <h1>test</h1> > </div> ); }y aquí es donde busco datos de la API usando axios y pensé que al usar entonces puedo acceder a la matriz dentro del objeto Promise pero no puedo
> import Axios from 'axios'; > > const initialState = []; > > export const LOAD_STOCKS = 'GET_STOCKS'; > > export const loadAllStocks = (payload) => ({ > type: LOAD_STOCKS, > payload, }); > > export const fetchStocks = (dispatch) => { > var options = { > method: 'GET', > url: 'https://coinranking1.p.rapidapi.com/coins', > params: { > referenceCurrencyUuid: 'yhjMzLPhuIDl', > timePeriod: '24h', > tiers: '1', > orderBy: 'marketCap', > orderDirection: 'desc', > limit: '50', > offset: '0', > }, > headers: { > 'x-rapidapi-host': 'coinranking1.p.rapidapi.com', > 'x-rapidapi-key': '03518c50f0mshb2f93a5c3fbb56fp1a5e6ajsn175d3c928506', > }, > }; > let result = Axios.request(options).then((response) => response.data).then((result) => result.data.coins); > dispatch(loadAllStocks(result)) > return result > }; > > > > const Stocksreducer = (state = initialState, action) => { > switch (action.type) { > case LOAD_STOCKS: > return action.payload > default: > return state; > } }; > > export default Stocksreducer;Ha declarado fetchStocks como una función síncrona, por lo que está enviando el objeto Return Promise de la solicitud de axios y no el valor resuelto.
Envíe el valor del resultado desde dentro de la cadena Promise:
export const fetchStocks = (dispatch) => { const options = { ... }; Axios.request(options) .then((response) => response.data) .then((result) => { dispatch(loadAllStocks(result.data.coins)); }) .catch(error => { // handle any rejected Promises or errors }); }; O convierta fetchStocks en una función async y await a que se resuelva la Promesa.
export const fetchStocks = async (dispatch) => { const options = { ... }; try { const response = await Axios.request(options); const result = response.data; dispatch(loadAllStocks(result.data.coins)); } catch(error) { // handle any rejected Promises or errors } };