weixin_44528094 2020-04-15 00:10 采纳率: 50%
浏览 207
已采纳

初学习react,本人弄了一个天气预测的网页,显示未来40天天气,我想让用户在文本框输入邮编,并且显示用户城市天气。

当我输入邮编,并不起作用,只会显示,我在this.state.zipcode设置的27403城市的天气, 另外如何用formap或者foreach 拿到数组

import React from 'react';

import './App.css';
const apiKey = '53df5b52f003d1bd1df16a7f6f299393';


class App extends React.Component{//Initial value
       constructor(){
       super();
      this.state={
       zipcode:'27403',

       weather:null,


      }
      this.handleChange  = this.handleChange.bind(this); 

}

async componentDidMount(){   //get weather data
  const weather=await this.fetchWeather();
      this.setState(
        {
          weather,

        }
      );
      console.log(weather)


}

fetchWeather=async () =>{// reading weather data

     return await fetch(`http://api.openweathermap.org/data/2.5/forecast?zip=${this.state.zipcode}&appid=53df5b52f003d1bd1df16a7f6f299393

        `).then(data=>{ return data.json();})


        }//api.openweathermap.org/data/2.5/weather?zip=${zipcode}&appid=${apiKey}`

  render(){


    const list = () => {
      let {weather}=this.state;
      const res = [];
      for(let i = 0; i < weather.list.length; i++) {
        res.push(<li key={i}> <span className="colorFont">The{i+1}Day  </span>  {weather.list[i].main.temp}</li>)
      }
      return res
    }


    if(!this.state.weather){
      return null;
    }
    if(!this.state.zipcode){
      return null;
    }


    let {weather}=this.state;

        return(

            <div className="App">
              <h2> {weather.city.country}  {weather.city.name}  {weather.cnt} days weather forecast </h2>
            <ul className="deteleUnderLine">

           {list()  }   {/*调用函数释*/}
            </ul>
            <input type="text" value={this.state.value} onChange={this.handleChange} placeholder="Zip Code"/>

          </div>


        )

  }

handleChange(event) {
  this.setState(
    {zipcode: event.target.value}
    );
  }

}
export default App;


  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2020-04-15 13:05
    关注

    这个 onChange 事件还需要再完善一下,设置 zipcode 后,还需要重新获取对应的天气信息,触发一下fetchWeather方法。

     this.setState(
        {zipcode: event.target.value}
        );
      }
    
        //触发 fetchWeather 方法。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP