'Button working correctly ,but only on second click
import { Input, Box, Text, Divider, Button } from '@chakra-ui/react';
import { useState } from 'react';
export default function SearchGithub() {
const [username, setUsername] = useState('');
const [data, setData] = useState({});
async function handleGithubSearch() {
await fetch('/api/github', {
method: 'POST',
body: JSON.stringify(username),
})
.then((response) => response.json())
.then((data) => setData(data));
console.log(data);
}
function handleUsername(e) {
setUsername(e.target.value);
}
return (
<Box>
<Text fontSize="lg"> Search for Github Repositories!</Text>
<Divider />
<Input
placeholder="Enter a github username"
onChange={handleUsername}
value={username}
/>
<Button
colorScheme="telegram"
position="fixed"
ml="3px"
onClick={handleGithubSearch}
>
Submit
</Button>
{data ? <h1> {data.login}</h1> : null}
</Box>
);
}
Hey I'm trying to make this github search app. Whenever I click to submit a username and bring back data, the function doesn't fire until the second click. I'm curious as to why.
Solution 1:[1]
Your function
async function handleGithubSearch() {
await fetch('/api/github', {
method: 'POST',
body: JSON.stringify(username),
})
.then((response) => response.json())
.then((data) => setData(data));
console.log(data);
}
is async function i.e means it needs to be waited during its execution so on your button you need to wait for this promise to finish as well here below is how i would've done it
<Button
colorScheme="telegram"
position="fixed"
ml="3px"
onClick={async () => {
await handleGithubSearch()
}}
>
Submit
</Button>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | ndotie |
