From 7fa9c4c56ed1c64c56f3be6ad01d8723f4c2c884 Mon Sep 17 00:00:00 2001 From: Michael Calvin Holmes Date: Sat, 13 Jan 2024 13:53:24 -0800 Subject: [PATCH 1/2] lesson 2.1 --- package-lock.json | 34 +++++++++++--- public/index.html | 2 +- src/GuessControl.js | 57 ++++++++--------------- src/NumberGuessingGame.js | 95 +++++++++++++-------------------------- 4 files changed, 79 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33e2a1b..19a2d7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3684,6 +3684,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -18538,9 +18549,11 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -23446,6 +23459,13 @@ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } } }, "ansi-html": { @@ -34973,9 +34993,11 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true }, "type-is": { "version": "1.6.18", diff --git a/public/index.html b/public/index.html index aa069f2..6a65c0b 100644 --- a/public/index.html +++ b/public/index.html @@ -24,7 +24,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - React App + React Legacy App diff --git a/src/GuessControl.js b/src/GuessControl.js index 64108b5..ae06c1b 100644 --- a/src/GuessControl.js +++ b/src/GuessControl.js @@ -1,47 +1,26 @@ -import React, { Component } from "react"; import Button from "./Button"; +import React, { useState } from "react"; -class GuessControl extends Component { - constructor(props) { - super(props); +function 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); - } + const onSubmitGuess = () => { + if (currentGuess !== "") { + onGuess(currentGuess); + setCurrentGuess(""); + } + }; - 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 ( -
- - -
- ); - } + return ( + <> + + + + ); } export default GuessControl; diff --git a/src/NumberGuessingGame.js b/src/NumberGuessingGame.js index 07c5a24..28b2591 100644 --- a/src/NumberGuessingGame.js +++ b/src/NumberGuessingGame.js @@ -1,77 +1,46 @@ -import React, { Component } from "react"; +import React, { useState } from "react"; import GuessControl from "./GuessControl"; -import GuessMessage from "./GuessMessage"; import GameOver from "./GameOver"; -/** - * - * Returns a random integer number from 1-100 inclusive - */ -function getRandomNumber() { - return Math.floor(Math.random() * 100) + 1; -} -const MAX_ATTEMPTS = 5; +const NumberGuessingGame = () => { + const getRandomNumber = () => Math.floor(Math.random() * 100) + 1; + const MAX_ATTEMPTS = 5; -class NumberGuessingGame extends Component { - constructor(props) { - super(props); + const [numberToGuess, setNumberToGuess] = useState(getRandomNumber); + const [numberOfGuesses, setNumberOfGuesses] = useState(0); + const [latestGuess, setLatestGuess] = useState(null); - 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); - } + const handleGuess = (guess) => { + setLatestGuess(Number(guess)); + setNumberOfGuesses(numberOfGuesses + 1); + }; - handleGuess(guess) { - this.setState({ - latestGuess: guess, - numberOfGuesses: this.state.numberOfGuesses + 1, - }); - } + const handleReset = () => { + setNumberToGuess(getRandomNumber); + setNumberOfGuesses(0); + setLatestGuess(null); + }; - handleReset() { - this.setState({ - numberToGuess: getRandomNumber(), - numberOfGuesses: 0, - latestGuess: null, - }); - } + return ( +
+

Number Guessing Game

+

Guess the number between 1 and 100

- render() { - const isCorrectGuess = this.state.latestGuess === this.state.numberToGuess; + - const isGameOver = - isCorrectGuess || this.state.numberOfGuesses === MAX_ATTEMPTS; + {latestGuess !== null && ( +

+ Latest Guess: {latestGuess}, Number of Guesses: {numberOfGuesses} +

+ )} - 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 && ( - - )} -
- ); - } -} + {numberOfGuesses === MAX_ATTEMPTS || latestGuess === numberToGuess ? ( + + ) : null} +
+ ); +}; export default NumberGuessingGame; From 4a8d7bfa585ce55b1fe3da95309fcb76dcce8886 Mon Sep 17 00:00:00 2001 From: Michael Calvin Holmes Date: Tue, 16 Jan 2024 11:57:41 -0800 Subject: [PATCH 2/2] Resubmit lesson 2.1 --- src/NumberGuessingGame.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/NumberGuessingGame.js b/src/NumberGuessingGame.js index 28b2591..56a7950 100644 --- a/src/NumberGuessingGame.js +++ b/src/NumberGuessingGame.js @@ -2,7 +2,6 @@ import React, { useState } from "react"; import GuessControl from "./GuessControl"; import GameOver from "./GameOver"; - const NumberGuessingGame = () => { const getRandomNumber = () => Math.floor(Math.random() * 100) + 1; const MAX_ATTEMPTS = 5; @@ -11,7 +10,6 @@ const NumberGuessingGame = () => { const [numberOfGuesses, setNumberOfGuesses] = useState(0); const [latestGuess, setLatestGuess] = useState(null); - const handleGuess = (guess) => { setLatestGuess(Number(guess)); setNumberOfGuesses(numberOfGuesses + 1); @@ -22,7 +20,7 @@ const NumberGuessingGame = () => { setNumberOfGuesses(0); setLatestGuess(null); }; - + // place in this comment to enable a resubmit return (

Number Guessing Game