Мне было интересно, как можно запустить функцию после использования useEffect для извлечения данных, когда функция манипулирует данными после того, как они были извлечены?
import React, { useState, useEffect } from 'react';
const Result = (props) => {
const [ playerName, setPlayerName ] = useState('');
const [ playerChoice, setPlayerChoice ] = useState(null);
const [ computerChoice, setComputerChoice ] = useState(null);
const [ result, setResult ] = useState(null);
useEffect(() => {
setPlayerName(props.location.state.playerName);
setPlayerChoice(props.location.state.playerChoice);
setComputerChoice(generateComputerChoice);
setResult(getResult())
}, []);
const getResult = () => {
// code that runs after the setting of the playerName and playerChoice. Will return "Win", "Lose", or "Draw"
};
const generateComputerChoice = () => {
const outcomes = [ 'Rock', 'Paper', 'Scissors' ];
return outcomes[Math.floor(Math.random() * outcomes.length)];
};
return (
<div className="app-container">
<strong>YOU {result}</strong>
<br />
<strong>{playerName}</strong> chose <strong>{playerChoice}</strong>
<br />
<strong>Computer</strong> chose <strong>{computerChoice}</strong>
</div>
);
};
export default Result;
Итак, в этом примере я беру playerName
и playerChoice
с предыдущей страницы, а затем добавляю их в свой useState при загрузке страницы.
После этого я случайным образом генерирую computerChoice
.
Однако после этого я хочу использовать playerChoice
amd computerChoice
, который был добавлен в состояние, и использовать его, чтобы увидеть, является ли игра выигрышной, проигрышной или ничьей.
result
оказывается null
, потому что я предполагаю, что к моменту вызова функции getResult
состояния еще не установлены.
Вы, ребята, знаете, что делать в этой ситуации? Похоже, это может быть обычным делом, учитывая, что вы можете получить данные из API, а затем что-то сделать с этими данными, прежде чем захотите их отобразить.