Javascript 是否为不存在的城市显示错误消息?

Javascript 是否为不存在的城市显示错误消息?,javascript,reactjs,Javascript,Reactjs,当用户输入不存在的城市时,我需要帮助显示错误。应用程序当前崩溃,但应显示“请输入现有城市”。有人帮忙吗 жжжааааааааааааааа107。Например, когда пользователи вводят несуществующий город, приложение не крашится, но оно должно показывать: пожалуйста, напишите существующий город. 是吗 import React, { Componen

当用户输入不存在的城市时,我需要帮助显示错误。应用程序当前崩溃,但应显示“请输入现有城市”。有人帮忙吗

жжжааааааааааааааа107。Например, когда пользователи вводят несуществующий город, приложение не крашится, но оно должно показывать: пожалуйста, напишите существующий город. 是吗

import React, { Component } from "react";
import WeatherInput from "./WeatherInput";

const KEY = "455137f97981800c10482bbc6539fba2";

class Weather extends Component {
  constructor(props) {
    super(props);
    this.state = {
      city: "",
      country: "",
      temperature: "",
      main: "",
      description: "",
      error: ""
    };
  }

  getWeatherInfo = async event => {
    event.preventDefault();
    const city = event.target.elements.city.value;
    const country = event.value;
    const api = await fetch(
      `http://api.openweathermap.org/data/2.5/weather?q=${city},${country},uk&APPID=${KEY}`
    );
    const data = await api.json();
    if (city) {
      this.setState({
        city: data.name,
        country: data.sys.country,
        temperature: data.main.temp,
        main: data.weather[0].main,
        description: data.weather[0].description,
        error: ""
      });
    } else {
      this.setState({
        city: "",
        country: "",
        temperature: "",
        main: "",
        description: "",
        error: "Please enter the values."
      });
    }
  };

  render() {
    const { city, country, temperature, main, description, error } = this.state;
    return (
      <WeatherInput
        getWeatherInfo={this.getWeatherInfo}
        city={city}
        country={country}
        temperature={temperature}
        main={main}
        description={description}
        error={error}
      />
    );
  }
}

export default Weather;
import React,{Component}来自“React”;
从“/WeatherInput”导入WeatherInput;
const KEY=“455137f97981800c10482bbc6539fba2”;
类扩展组件{
建造师(道具){
超级(道具);
此.state={
城市:“,
国家:“,
温度:“,
主要目的:“,
说明:“,
错误:“
};
}
getWeatherInfo=异步事件=>{
event.preventDefault();
const city=event.target.elements.city.value;
const country=event.value;
常量api=等待获取(
`http://api.openweathermap.org/data/2.5/weather?q=${city}、${country}、英国&APPID=${KEY}`
);
const data=await api.json();
国际单项体育联合会(城市){
这是我的国家({
城市:data.name,
国家:data.sys.country,
温度:data.main.temp,
main:data.weather[0]。main,
description:data.weather[0]。description,
错误:“
});
}否则{
这是我的国家({
城市:“,
国家:“,
温度:“,
主要目的:“,
说明:“,
错误:“请输入值。”
});
}
};
render(){
const{city,country,temperature,main,description,error}=this.state;
返回(
);
}
}
导出默认天气;

您提到关于
国家/地区
未定义的错误,因此需要对此进行更多检查

首先,如果国家未定义,您想做什么?如果希望它以与未定义的城市相同的方式出错,则将其添加到If语句中,如下所示:

if(城市和国家)

如果您不关心
country
是否未定义,只想检查city,如果尚未设置,请将您的country变量设置为空字符串:


const country=event.value | |'

您提到您遇到了一个关于未定义的
country
的错误,因此需要对此进行更多检查

首先,如果国家未定义,您想做什么?如果希望它以与未定义的城市相同的方式出错,则将其添加到If语句中,如下所示:

if(城市和国家)

如果您不关心
country
是否未定义,只想检查city,如果尚未设置,请将您的country变量设置为空字符串:

const country=event.value | |'

当前您的代码

if (city) {
只需检查const city是否有值。这总是正确的,即使用户给出了一个不存在的城市

它是检查城市是否存在的API。如果没有,它将返回以下内容:

{
    "cod": "404",
    "message": "city not found"
}
因此,您需要使用API中的这些信息。一种方法是说,好的,如果城市存在,API将返回一个“name”字段;如果没有,则没有“名称”字段:

 const data = await api.json();

    if (data.name) {
      this.setState({
        city: data.name,
        country: data.sys.country,
        temperature: data.main.temp,
        main: data.weather[0].main,
        description: data.weather[0].description,
        error: ""
      });
    } else {
      this.setState({
        city: "",
        country: "",
        temperature: "",
        main: "",
        description: "",
        error: "Please enter the values."
      });
    }
  };

当前您的代码

if (city) {
只需检查const city是否有值。这总是正确的,即使用户给出了一个不存在的城市

它是检查城市是否存在的API。如果没有,它将返回以下内容:

{
    "cod": "404",
    "message": "city not found"
}
因此,您需要使用API中的这些信息。一种方法是说,好的,如果城市存在,API将返回一个“name”字段;如果没有,则没有“名称”字段:

 const data = await api.json();

    if (data.name) {
      this.setState({
        city: data.name,
        country: data.sys.country,
        temperature: data.main.temp,
        main: data.weather[0].main,
        description: data.weather[0].description,
        error: ""
      });
    } else {
      this.setState({
        city: "",
        country: "",
        temperature: "",
        main: "",
        description: "",
        error: "Please enter the values."
      });
    }
  };


当您说崩溃时,您会遇到什么错误?未处理的拒绝(TypeError):无法读取未定义的属性“country”,并且您已尝试console.log事件?不确定WeatherInput中的内容,但通常通过输入,您可以从event.target.valueEverything中获取值。一切正常,但当我进入不存在的城市并搜索时,其崩溃和错误:无法读取未定义的属性“country”。但是,我想,当我输入不存在的城市时,会显示一条错误消息,请输入现有的城市。这样,您就可以检查城市是否存在,而不是检查国家是否存在。也许把它加到你的支票上<代码>如果(城市和国家)当您说崩溃时,您会得到什么错误?未处理的拒绝(TypeError):无法读取未定义的属性“country”,并且您已尝试console.log事件?不确定WeatherInput中的内容,但通常通过输入,您可以从event.target.valueEverything中获取值。一切正常,但当我进入不存在的城市并搜索时,其崩溃和错误:无法读取未定义的属性“country”。但是,我想,当我输入不存在的城市时,会显示一条错误消息,请输入现有的城市。这样,您就可以检查城市是否存在,而不是检查国家是否存在。也许把它加到你的支票上<代码>如果(城市和国家)谢谢你的帮助,乔恩!我真的很感激!谢谢你的帮助,乔恩!我真的很感激!