Предыдущее значение useState используется при запуске следующего действия.Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Предыдущее значение useState используется при запуске следующего действия.

Сообщение Anonymous »

Я пытаюсь пройти курс FreeCodeCamp «Библиотеки интерфейсной разработки». Один из последних проектов — создание простого калькулятора. Более подробную информацию об этом можно найти здесь
Когда я запускаю автоматические тесты, чтобы убедиться, что функциональность работает должным образом, некоторые из них терпят неудачу (нажмите меню «гамбургер» -> выберите «Калькулятор 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:

Код: Выделить всё

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]);
У меня есть предположение, что тесты выполняются очень быстро и значение формулы обновляется недостаточно часто. Однако у меня не так много опыта работы с React, и я могу ошибаться... Поэтому я отправил код на Github, чтобы поделиться полным файлом App.js. И временно запустил приложение на Heroku, чтобы вы могли увидеть, как оно на самом деле работает.
Я буду рад поделиться более подробной информацией, если это необходимо, и заранее спасибо!
Я пытался дождаться обновления состояния, используя хук useEffect, функции обратного вызова и так далее. Кроме того, я потратил довольно много времени на отладку поведения, но так и не смог заставить его работать.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -triggered
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»