onChange event doesn’t return the first change of the text input but works on subsequent changes. Sorry if this is obvious, I’m new to React.
import React, { useState } from 'react';
import axios from 'axios';
function Header() {
const [text, setText] = useState("");
const [location, setLocation] = useState("");
function handleChange(event) {
setText(event.target.value);
}
// when submit button clicked, current state of the text input is stored inside location constant
function handleClick() {
setLocation(text);
const geoCoderURL = "http://api.openweathermap.org/geo/1.0/direct?q=" + location + "&limit=5&appid={apikey}"
function getCoordinates(url) {
axios.get(url).then((response) => {
const locationLat = response.data[0].lat;
const locationLon = response.data[0].lon;
});
}
getCoordinates(geoCoderURL);
}
return (
<div>
<h1>Five Day Forecast</h1>
<input onChange={handleChange} type="text" name="name"autoFocus placeholder="Enter location here."/>
<button type="submit" onClick={handleClick}>Forecast</button>
</div>
)
}
export default Header;
Advertisement
Answer
When you call setLocation(text);, handleClick will finish execution before the location value is actually updated.
There is no need for location and setLocation; looks like maybe location is supposed to be the same as text.
function handleClick() {
const geoCoderURL = "http://api.openweathermap.org/geo/1.0/direct?q=" + text + "&limit=5&appid={apikey}"
function getCoordinates(url) {
axios.get(url).then((response) => {
const locationLat = response.data[0].lat;
const locationLon = response.data[0].lon;
});
}
getCoordinates(geoCoderURL);
}