Я получаю необработанное отклонение (TypeError): невозможно прочитать свойство 'temp' из неопределенного значения при попытке создать приложение реакции с использованием openweatherapi - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь создать приложение погоды, используя открытые данные о погоде api https://openweathermap.org/guide, и я получаю эту ошибку при нажатии кнопки получения погоды. Это мое основное приложение. js переименовано в профиль. js

import React, { Component } from 'react'
import jwt_decode from 'jwt-decode'
import Heading from './heading'
import Form from './form'
import Forecast from './forcast';

const api_key="secretnumber";

class Profile extends React.Component {



 componentDidMount() {
 const token = localStorage.usertoken
 const decoded = jwt_decode(token)
 this.setState({
  first_name: decoded.first_name,
  last_name: decoded.last_name,
  email: decoded.email
})
}
state={
temperature : "",
city : "",
country:"",
humidity:"",
pressure:"",
icon:"",
description:"",
error:""
}
getWeather = async (e) => {
 const city = e.target.elements.city.value;
 const country = e.target.elements.country.value;
 e.preventDefault();
 const api_call = await fetch('http://api.openweathermap.org/data/2.5/weather?q=${city},${country}&units=metric&appid=${api_key}');

 const response = await api_call.json();
 if(city && country){
     this.setstate({
         temperature: response.main.temp,
         city: response.name,
         country: response.sys.country,
         humidity: response.main.humidity,
         pressure: response.weather[0].icon,
         description:response.weather[0].description,
         error:""
     })

 }else{
     this.setState({
         error: "Please fill out input fields..."
     })
 }
}
 render() {
return (
  <div className="container">
    <div className="jumbotron mt-5">
      <div className="col-sm-8 mx-auto">
        <h1 className="text-center">PROFILE</h1>
      </div>
      <table className="table col-md-6 mx-auto">
        <tbody>
          <tr>
            <td>Fist Name</td>
            <td>{this.state.first_name}</td>
          </tr>
          <tr>
            <td>Last Name</td>
            <td>{this.state.last_name}</td>
          </tr>
          <tr>
            <td>Email</td>
            <td>{this.state.email}</td>
          </tr>
        </tbody>
      </table>
      <div>
          <Heading/>
          <Form loadWeather={this.getWeather}/>
          <Forecast 
          temperature={this.state.temperature}
          city={this.state.city}
          country={this.state.country}
          humidity={this.state.humidity}
          pressure={this.state.pressure}
          icon={this.state.icon}
          description={this.state.description}
          error={this.state.error}/>
      </div>
    </div>

  </div>
 )
 }
 }

export default Profile

Это прогноз. js

import React from 'react';

const Forecast = (props) =>{
return(
    <div>
        {props.country && props.city && <p>Location:{props.city},{props.country}</p>}
        {props.temperature && <p>Temperature: {props.temperature}</p>}
        {props.humidity && <p>Humidity:{props.humidity}</p>}
        {props.pressure && <p>Pressure: {props.pressure}</p>}
        {props.icon && <img src="" alt="weather icon"/>}
        {props.description && <p>Conditions:{props.description}</p>}
        {props.error && <p>{props.error}</p>}
    </div>
)
}
export default Forecast;

А это моя форма. js

import React from 'react';

const Form = (props) =>{
return(
    <form onSubmit = {props.loadWeather}>
        <input type="text" name="city" placeholder="Choose a City" value="London"/>
        <input type="text" name="country" placeholder="Choose a Country" value="uk"/>
        <button>Get Weather</button>
    </form>
)
}
export default Form;

Я пытаюсь с городом Лондон и страной Великобритании, и я получаю ошибку, упомянутую выше. Спасибо за помощь. Очень ценю, если эту проблему можно решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...