首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: weatherData.map不是一个函数

TypeError: weatherData.map不是一个函数
EN

Stack Overflow用户
提问于 2022-08-26 21:25:33
回答 2查看 55关注 0票数 1

我试图从API映射数据,但是在编写显示数据的代码时,我得到了以下错误:TypeError: weatherData.map is not a function

我尝试从代码中删除useEffect,并尝试添加花括号:const [weatherData, setWeatherData] = useState([{}])

更新:第14行日志未定义:console.log(weatherData.response)

代码语言:javascript
复制
import axios from 'axios'
import { useEffect, useState } from 'react'
import './App.css'

function App() {
  const [search, setSearch] = useState("london")
  const [weatherData, setWeatherData] = useState([])



  const getWeatherData = async () => {
    try {
      const weatherData = await axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${search}&appid={APIKEY}`);
      console.log(weatherData.response);
      if (weatherData) {
        setWeatherData(weatherData);
      }
    } catch (err) {
      console.error(err);
    }
  }

  useEffect(() => {
    getWeatherData()
  }, [getWeatherData])

  const handleChange = (e) => {
    setSearch(e.target.value)
  }


  return (
    <div className="App">
      <div className='inputContainer'>
        <input className='searchInput' type="text" onChange={handleChange} />
      </div>
      {weatherData.map((weather) => {
        return (
          <div>
            <h1>{weather.name}, {weather.country}</h1>
          </div>
        )
      })}
    </div>
  )
}

export default App
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-26 23:50:23

在获取数据和呈现数据时出现了错误。

只是更改整个应用程序组件,如下所示:

代码语言:javascript
复制
import { useEffect, useState } from "react";
import axios from "axios";
function App() {
  const [search, setSearch] = useState("London");
  const [weatherData, setWeatherData] = useState([]);
  const APIKEY = "pass your api key here";

  useEffect(() => {
    const fetchData = async () => {
      const result = await axios(
        `https://api.openweathermap.org/data/2.5/weather?q=${search}&appid=${APIKEY}`
      );

      setWeatherData(result.data);
    };

    fetchData();
  }, [search]);

  const handleChange = (e) => {
    setSearch(e.target.value);
  };

  return (
    <div className="App">
      <div className="inputContainer">
        <input className="searchInput" type="text" onChange={handleChange} />
      </div>
      <h1>
        {" "}
        {weatherData.name} ,{" "}
        {weatherData.sys ? <span>{weatherData.sys.country}</span> : ""}{" "}
      </h1>
    </div>
  );
}

export default App;

这应该很好,只需确保更改:const APIKEY = "pass your api key ";const APIKEY = "<your API key> ";

这是 码箱的演示

票数 1
EN

Stack Overflow用户

发布于 2022-08-26 21:40:45

创建一个承诺函数:

代码语言:javascript
复制
const getWeatherData = async () => {
  try {
    
    const weatherData = await axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${search}&appid={APIKEY}`);
    console.log(weatherData.response);

    if (weatherData.response.data) { 
        setWeatherData(weatherData.response.data);
    }
  } catch (err) {
    console.error(err);
  }
}

那就叫吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73506619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档