Когда я запускаю автоматические тесты, чтобы убедиться, что функциональность работает должным образом, некоторые из них терпят неудачу (нажмите меню «гамбургер» -> выберите «Калькулятор JavaScript» -> «Выполнить»). Тесты).
Например, когда я вручную нажимаю формулу «5 * 5,5», она возвращает 27,5, как и ожидалось. Однако в тесте №12 написано, что результат 302,5 вместо 27,5.
Я понял, что это происходит потому, что новый тест иногда суммирует результат предыдущего расчета до первого числа следующего теста (он рассчитал «55*5,5» вместо «5*5,5»). Я пытался отладить, используя журналы консоли и инструменты отладки React. Я считаю, что это вызвано асинхронным useState. Перехват useEffect предлагается во многих руководствах, но я не уверен, правильно ли я его использую. Я сохраняю формулу и вывод в переменных useState следующим образом:
Код: Выделить всё
const [formula, setFormula] = useState([]);
const [output, setOutput] = useState("0");
const [reset, setReset] = useState(false);
Код: Выделить всё
const handleAC = () => {
setFormula([]);
setOutput("0");
setReset(true);
}
Код: Выделить всё
useEffect(() => {
if (reset) {
// Perform any operations that should happen after reset
console.log("Reset complete");
console.log("AC clicked: ", formula);
setReset(false);
}
}, [formula, output, reset]);
Я буду рад поделиться более подробной информацией, если это необходимо, и заранее спасибо!
Я пытался дождаться обновления состояния, используя хук useEffect, функции обратного вызова и так далее. Кроме того, я потратил довольно много времени на отладку поведения, но так и не смог заставить его работать.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -triggered