Reputation: 121
I have a number guessing game in React, the reset button is not clearing the fields. This is my code:
import React, { useState } from "react";
import Button from "react-bootstrap/Button";
import Form from "react-bootstrap/Form";
let luckyNumber = Math.floor(Math.random() * 100) + 1;
function GuessingGame() {
const [guess, setGuess] = useState("");
const [count, setCount] = useState(0);
const [guesses, setGuesses] = useState([]);
const [luckyN, setLuckyN] = useState(luckyNumber);
const [message, setMessage] = useState(" Start guessing...");
const [disabled, setDisabled] = useState(false);
const handlerValueChange = (event) => {
setGuess(event.target.value);
};
const submitHandler = () => {
if (+luckyNumber === +guess) {
setMessage(" Congratulations! You guessed the Lucky Number!.");
setDisabled(true);
} else if (count === 2) {
setMessage(" Game over, maximum guess attempts have been reached.");
setDisabled(true);
} else if (luckyNumber < guess) {
setMessage(" Guess is too high.");
} else if (luckyNumber > guess) {
setMessage(" Guess is too low.");
}
setCount(count + 1);
setGuesses([...guesses, guess]);
};
const resetBtn = () => {
setDisabled(false);
setGuess = 0;
setCount = 0;
guess = ('')
message = "";
setGuess = ([])
setLuckyN = (0);
setMessage = (' Start guessing...');
setLuckyN(Math.floor(Math.random()* 100) + 1)
};
return (
<>
<h4>
I am thinking of a number between 1 and 100. Guess the Lucky Number!
</h4>
<p>You have made {count} guesses </p>
<p>Your guess is too high! Your guess is too low!</p>
<p> Your current guess is {guess}</p>
<Form>
<Form.Control
disabled={disabled}
type="text"
value={guess}
onChange={handlerValueChange}
></Form.Control>
<Button disabled={disabled} onClick={submitHandler}>
Guess
</Button>
<br />
<br />
<Button onClick={resetBtn}>Reset</Button>
</Form>
<p>message:{message}</p>
<p>Total plays: {count}</p>
<p>You are trying to guess this lucky number: {luckyNumber}!</p>
<p>Your guesses: </p>
{guesses?.map((item, index) => {
return <span key={index}>{item} </span>;
})}
</>
);
}
export default GuessingGame;
The button needs to clear the fields, load the random number and start again, it is not doing that and even after the validation of 3 incorrect attempts, if I hit reset and hit guess again, the count keeps going and the program runs like if there is no validation...
Any helps with this? Thanks!!
Upvotes: 0
Views: 275
Reputation: 5304
Call the setStates as a function, not as an assignment in your resetBtn
function.
For example:
const resetBtn = () => {
setDisabled(false);
setCount(0);
setGuess(0);
setMessage('');
setGuess([])
setLuckyN(0);
setMessage(' Start guessing...');
setLuckyN(Math.floor(Math.random()* 100) + 1);
};
Upvotes: 3