diff --git a/package-lock.json b/package-lock.json
index 33e2a1b..ae20560 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"dependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2",
- "react-scripts": "4.0.3"
+ "react-scripts": "^4.0.3"
}
},
"node_modules/@babel/code-frame": {
diff --git a/package.json b/package.json
index a4adbbd..3364262 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"dependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2",
- "react-scripts": "4.0.3"
+ "react-scripts": "^4.0.3"
},
"scripts": {
"start": "react-scripts start",
diff --git a/src/GuessControl.js b/src/GuessControl.js
index 64108b5..fbeaa21 100644
--- a/src/GuessControl.js
+++ b/src/GuessControl.js
@@ -1,47 +1,23 @@
-import React, { Component } from "react";
+import { useState } from "react";
import Button from "./Button";
-class GuessControl extends Component {
- constructor(props) {
- super(props);
+const GuessControl = ({ onGuess }) => {
+ const [currentGuess, setcurrentGuess] = useState("");
- this.state = {
- currentGuess: "",
- };
+ const handleInputChange = (event) => {
+ setcurrentGuess(event.target.value);
+ };
- /**
- * These lines are required to make the methods/functions declared on this
- * class have the correct `this` object when they run.
- */
- this.handleInputChange = this.handleInputChange.bind(this);
- this.onSubmitGuess = this.onSubmitGuess.bind(this);
- }
-
- handleInputChange(event) {
- this.setState({ currentGuess: event.target.value });
- }
-
- onSubmitGuess() {
- // Since the values from an HTML input are strings by default,
- // convert to a number for the returned guess value
- // by passing in the string to the Number function.
- // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
- this.props.onGuess(Number(this.state.currentGuess));
- this.setState({ currentGuess: "" });
- }
-
- render() {
- return (
-
-
-
-
- );
- }
-}
+ const onSubmitGuess = () => {
+ onGuess(Number(currentGuess));
+ setcurrentGuess("");
+ };
+ return (
+
+
+
+
+ );
+};
export default GuessControl;
diff --git a/src/NumberGuessingGame.js b/src/NumberGuessingGame.js
index 07c5a24..e35557e 100644
--- a/src/NumberGuessingGame.js
+++ b/src/NumberGuessingGame.js
@@ -1,77 +1,53 @@
-import React, { Component } from "react";
+import React, { useState } from "react";
import GuessControl from "./GuessControl";
-import GuessMessage from "./GuessMessage";
import GameOver from "./GameOver";
-
+import GuessMessage from "./GuessMessage";
/**
- *
* Returns a random integer number from 1-100 inclusive
*/
function getRandomNumber() {
return Math.floor(Math.random() * 100) + 1;
}
-
-const MAX_ATTEMPTS = 5;
-
-class NumberGuessingGame extends Component {
- constructor(props) {
- super(props);
-
- this.state = {
- numberToGuess: getRandomNumber(),
- numberOfGuesses: 0,
- latestGuess: null,
- };
-
- /**
- * These lines are required to make the methods/functions declared on this
- * class have the correct `this` object when they run.
- */
- this.handleGuess = this.handleGuess.bind(this);
- this.handleReset = this.handleReset.bind(this);
- }
-
- handleGuess(guess) {
- this.setState({
- latestGuess: guess,
- numberOfGuesses: this.state.numberOfGuesses + 1,
- });
- }
-
- handleReset() {
- this.setState({
- numberToGuess: getRandomNumber(),
- numberOfGuesses: 0,
- latestGuess: null,
- });
- }
-
- render() {
- const isCorrectGuess = this.state.latestGuess === this.state.numberToGuess;
-
- const isGameOver =
- isCorrectGuess || this.state.numberOfGuesses === MAX_ATTEMPTS;
-
- return (
-
-
I'm thinking of a number from 1 to 100.
-
- Can you guess the number I am thinking of in {MAX_ATTEMPTS} tries?
-
-
- {isGameOver && (
-
- )}
- {!isGameOver && (
-
- )}
-
- );
- }
-}
+const NumberGuessingGame = () => {
+ const [numberToGuess, setNumberToGuess] = useState(getRandomNumber());
+ const [numberOfGuesses, setNumberOfGuesses] = useState(0);
+ const [latestGuess, setLastestGuess] = useState(null);
+
+ const MAX_ATTEMPTS = 5;
+
+ const handleGuess = (guess) => {
+ setLastestGuess(Number(guess));
+ setNumberOfGuesses(numberOfGuesses + 1);
+ };
+
+ // resets functions
+ const handleReset = () => {
+ setNumberToGuess(getRandomNumber());
+ setNumberOfGuesses(0);
+ setLastestGuess(null);
+ };
+
+ const isCorrectGuess = latestGuess === numberToGuess;
+
+ const isGameOver = isCorrectGuess || numberOfGuesses === MAX_ATTEMPTS;
+
+ return (
+
+
I'm thinking of a number from 1 to 100.
+
+ Can you guess the number I am thinking of in {MAX_ATTEMPTS} tries?
+
+
+ {isGameOver && }
+ {!isGameOver && (
+
+ )}
+
+ );
+};
export default NumberGuessingGame;