Я играю в камень, ножницы, бумагу.В приведенном ниже коде у меня есть файл контекста, который используется для хранения глобального состояния.Я также показываю свой компонент выбора.Когда пользователь нажимает кнопку в компоненте выбора, вызывается метод setChoices, который должен установить переменные выбора пользователя и процессора в глобальном состоянии.Затем запускается метод cpuScore () для увеличения показателя процессора (просто для иллюстрации проблемы).Оценка процессора обновляется, как и ожидалось, но переменные выбора не обновляются.Если я не запускаю метод cpuScore, переменные выбора обновляются, как и ожидалось, но, очевидно, не оценка.
// контекстный файл
import React, { createContext, useState } from 'react';
const GameContext = createContext();
const GameContextProvider = props => {
const [gameItems, setGameItems] = useState(
{userChoice: null, userScore: 0, cpuChoice: null, cpuScore: 0}
);
const setChoices = (userChoice, cpuChoice) => {
setGameItems({...gameItems, userChoice: userChoice, cpuChoice: cpuChoice})
}
const cpuScore = () => {
setGameItems({...gameItems, cpuScore: gameItems.cpuScore + 1})
}
return (
<GameContext.Provider value={{gameItems, setChoices, cpuScore}}>
{ props.children }
</GameContext.Provider>
)
}
export default GameContextProvider;
// компонент выбора
import React, { useContext } from 'react';
import { GameContext } from '../contexts/GameContext';
const Choices = (props) => {
const { setChoices, cpuScore } = useContext(GameContext);
const getCpuChoice = () => {
const cpuChoices = ['r', 'p', 's'];
const randomIndex = Math.floor((Math.random() * 3));
const cpuDecision = cpuChoices[randomIndex];
return cpuDecision
}
const playGame = (e) => {
const userChoice = e.target.id;
const cpuChoice = getCpuChoice();
setChoices(userChoice, cpuChoice);
cpuScore();
}
return (
<div>
<h1>Make Your Selection</h1>
<div className="choices">
<i className="choice fas fa-hand-paper fa-10x" id="p" onClick={playGame}></i>
<i className="choice fas fa-hand-rock fa-10x" id="r" onClick={playGame}></i>
<i className="choice fas fa-hand-scissors fa-10x" id='s' onClick={playGame}></i>
</div>
</div>
)
Что мне нужно изменить, чтобы установить состояние для выбора и оценки?