Obtuve datos de esta API y me gustaría almacenar ciertas cosas en State o una variable (como una matriz).
var baseUrl = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=<api_key>`; const [chart, setChart] = useState(); useEffect(() => { axios.get(baseUrl).then(res => { setChart(res.data); console.log(res.data); }); }, [baseUrl]); useEffect(()=>{}, [chart]);En este punto, el gráfico (estado) tiene todos los datos almacenados (100 entradas).
"Meta Data": { "1. Information": "Daily Prices (open, high, low, close) and Volumes", "2. Symbol": "IBM", "3. Last Refreshed": "2022-05-06", "4. Output Size": "Compact", "5. Time Zone": "US/Eastern" }, "Time Series (Daily)": { "2022-05-06": { "1. open": "135.4700", "2. high": "137.9900", "3. low": "135.4700", "4. close": "137.6700", "5. volume": "7306396" }, "2022-05-05": { "1. open": "136.4600", "2. high": "137.2600", "3. low": "134.7600", "4. close": "135.9200", "5. volume": "5957434" },A continuación, me gustaría acceder a "Serie temporal (diario)" y obtener el número "1. Abierto" para cada día.
Traté de acceder manualmente a esos datos así (solo para ver si funciona)
const getNumber = Object.keys(chart['Time Series (Daily)']["2022-05-06"]["1. open"]); console.log("today's 1.open number is: " + getNumber);
pero no... react está muy enojado conmigo dándome un error diciendo: "TypeError: Cannot read properties of undefined (reading 'Time Series (Daily)')"
También probé sin Object.keys pero desafortunadamente me da el mismo error. Cuál es el problema ? ¿Cómo puedo acceder a esos datos y almacenarlos en state/let/const.
En realidad, no necesita Object.keys . Y el error que está recibiendo se debe a que está llamando a chart antes de asignarlo llamando a setChart . Debe verificar si chart no está undefined , y es mejor verificar todas las propiedades a las que está accediendo.
En ese caso, para el primer renderizado obtendrá undefined (porque aún no obtiene datos de la API) y luego obtendrá el resultado correcto.
const getNumber = chart?.['Time Series (Daily)']?.["2022-05-06"]?.["1. open"]