import Info from "./components/Info"; import Search from "./components/Search"; import axios from "axios"; import { useEffect, useState } from "react"; const App = () => { const API_KEY = `<REDACTED>` const baseURL = `http://api.weatherapi.com/v1/current.json?key=${API_KEY}&q=` const [weatherData, setWeatherData] = useState({}) const [search, setSearch] = useState('London') const [error, setError] = useState('') useEffect(() => { axios.get(`${baseURL + search}`) .then(resp => { setWeatherData(resp.data) }) .catch(error => setError(error.message)) }, [search]) console.log(weatherData.location.name); return ( <div className="App"> <h1 style={{ textAlign: 'center', marginBottom: '2rem' }}>{error}</h1> <Search setSearch={setSearch} /> <div className="container"> <Info weatherData={weatherData} /> </div> </div> ); } export default App;Estoy tratando de crear una aplicación meteorológica en reaccionar. Estoy usando la API meteorológica que puedes ver en el código (tal vez también deberías echarle un vistazo a la estructura de la API). Cuando registro en la consola weatherData.location , obtengo los datos meteorológicos normales. Pero cuando pruebo weatherData.location.name me sale el error que dice: Uncaught TypeError: Cannot read properties of undefined (reading 'name') . Empecé a aprender React hace dos semanas, así que todavía soy un principiante... Gracias.
Esto ocurre cuando la API aún no ha enviado una respuesta y los datos meteorológicos aún están vacíos. Recomiendo agregar un estado [loading,setLoading] y configurarlo como verdadero de forma predeterminada. Luego configúrelo como falso en la .then(resp => . Haga una declaración if para verificar si la carga es falsa, y si es así, imprima/renderice el contenido de weatherData.
Debe agregar el operador ternery en el archivo console.log
como console.log(weatherData? ubicación ? .name) o puede probar console.log(weatherData && weatherData.ubicación && weatherDataname.ubicación.nombre)
está sucediendo porque en el estado inicial no puede leer el valor del nombre porque probablemente es una cadena vacía.
prueba este método.