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

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

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

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

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


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

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽