Задать вопрос
@flexpc

Блокировка кнопки на время выполнения функции?

Была проблема, придумал такое решение:
const [desable, setDesable] = React.useState(false);

function tap() {
    setDesable(true);
    //какой то код
    setDesable(false);

  return (
    <div className="App">
    <button disabled={desable} onClick={tap}>Считать</button>
    </div>


Вроде бы кнопка блокируется, но при этом если сделать двойной клик, то функция все равно выполниться два раза.
Как исправить?
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
@ivan_ivanov_ivanych
Реакт имеет свойство оптимизировать изменение состояния компонента в одной функции, для того, чтобы избегать лишних перерендеров компонента. Обойти это можно можно с помощью асинхронных функций.
async function tap() {
    setDesable(true);
    //какой то код
     await new Promise((resolve) => setTimeout(resolve, 1000));
    setDesable(false);
}

В этой функции сначала выполняется первая функция изменения состояние setDisable(true), далее ожидание выполнения промиса, во время которого происходил перерендер. И далее, спустя 1000 мс, вызывается setDisable(false)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы