Kyle Johnson
@11kyleAll comments
- @rustysym@11kyle
Hey Emre! Great job on your solution! I checked into your question and have some feedback.
- Score takes a negative value.
This can be fixed by wrapping your
setScore((score) => score -1)
inside anif
statement like soif (score > 0) { setScore((score) => score - 1) }
- Score doesn't seem to be updating correctly
You are right on thinking it is the
useEffect
hook that is causing problems here.useEffect
gets called on initial render and again every time anything in the dependency array changes. You also never want to update anything from the dependency array from inside theuseEffect
. This could cause an infinite loop. In your case, theuseEffect
is running a minimum of 2 times and that is part of why you are seeing weird scores. The way your game is setup you can actually leave the dependency array empty like souseEffect(() => { onSelect(); }, []);
In addition, there's a weird thing happening with
useState
inside your GameContext.js.useState
actually takes 'time' to update its value. It's just a part of react. When you setState and then ask your function to do something with it, it is using the previous value. You can replacehouseSelection
withnumber
inside your function like soconst onSelect = () => { const userSelect = GameRules[selection].value; const number = Math.floor(Math.random() * 3); setHouseSelection(number); setTimeout(() => { setShow(true); if (GameRules[number].beats.includes(userSelect)) { setResult("You Lose"); setScore((score) => score - 1); } else { if (GameRules[number].value == userSelect) { setResult("Tie"); } else { setResult("You Win"); setScore((score) => score + 1); } } }, 3000); };
Marked as helpful - @Lukiticas@11kyle
Great work! I really like that you took the challenge and added your own twist. The only negative thing I noticed is the colors used. I feel like the neon green text with a green background is hard for the eye to pickup.
As for your question about when to use article, h2, etc. Here's a very good link on what elements should be used and why. Some key benefits to using the right elements include better readability and improved SEO.
Marked as helpful