N
Чисть стейт после отправки запроса в debounce
а как мне тогда отрисовывать то что пришло?)
Мирослав
Чисть стейт после отправки запроса в debounce
Не поможет. Нужно отменять запрос
Мирослав
Тут либо отменять запрос, либо чистить стейт по ответу на пустой запрос
N
Тут либо отменять запрос, либо чистить стейт по ответу на пустой запрос
хм🧐 пустой запрос не могу отправить о сервера ошибка прилетит, поэтому проверка стоит на то что бы в стейте компонента что то было)
Мирослав
Отменять запрос. Кейс интересный )
N
Отменять запрос. Кейс интересный )
а можете подсказать где про это почитать можно?) я с таким не сталкивалась
Anonymous
Всем привет. Подскажите как правильно описать типы для модуля. Я создал файл d.ts ошибка о том что модул не имеет файла с обьявлеными типами пропала.Но модуль видит как тип any
Anonymous
Anonymous
Мирослав
Nikolai
Можно не канселить его, если не отправлять)
Nikolai
Он же в дебаунс завернут
Мирослав
Можно не канселить его, если не отправлять)
А что делать с тем, который уже отправлен?
Мирослав
Оно ж асинхронно
Мирослав
свой маленький дебаунс с блекджеком и таймаутами. if (pusto) clearTimeout
Но предыдущий реквест может за 5 секунд вернуться
Nikolai
Мирослав
Зачем с ним что то делать?
Он апдейтнет стейт же
Nikolai
Он апдейтнет стейт же
Стейт апдейтит функция, а не запрос
Мирослав
Ответы могут возвращатся в рандомном порядке в рандомное время
Мирослав
Стейт апдейтит функция, а не запрос
Как она может отличить актуальный ответ от неактуального?
Alexey
Но предыдущий реквест может за 5 секунд вернуться
оно внутри асинхронное мы все подряд почистить должны, т.е. cleartimeout убьет всё то, что должно дождаться ответа и обновить стейт
Мирослав
Все предыдущие тоесть
Мирослав
Как cleantimeot поможет избежать получения ответа?
Nikolai
Я же говорю — надо отменять запрос
И придёт rejected из промиса
Nikolai
Как cleantimeot поможет избежать получения ответа?
У неё проблема не в запросе, а в дебаунсе
Alexey
Как cleantimeot поможет избежать получения ответа?
он поможет избежать обновления сьейта
Мирослав
Ну я бы делал проще - позволял бы серверу ответить ошибкой на пустой запрос и чистил бы так
Мирослав
он поможет избежать обновления сьейта
Не понимаю. Разве event handler пересоздать? Или целый стейт пересоздавать?
Nikolai
Понаберут утилит из лодаша и даже не понимают как оно внутри работает
Мирослав
Понаберут утилит из лодаша и даже не понимают как оно внутри работает
Ну я никогда не юзал лодашевский дебаунс. Но объясни как отмена таймаута предотвратит получение ответа event handelr'ом
Alexey
Не понимаю. Разве event handler пересоздать? Или целый стейт пересоздавать?
ну смотри, мы удаляем символы из строки, на каждое удаление в settimeout вызывается что-то, что await fetch и потом setstate. Если мы удаляем символ раньше, чем тайм-аут у дебаунса, то, что было в предыдущем вызове колбека таймаута не произойдет.
Alexey
если у нас оказалась строчка пустая, мы удаляем крайний тайм-аут с одним символом и чистим стейт
Мирослав
Он выполнится
Alexey
почему он выполниться должен? не пойму
Nikolai
Ну я никогда не юзал лодашевский дебаунс. Но объясни как отмена таймаута предотвратит получение ответа event handelr'ом
Никак не предотвратит. Нужно либо это контролить до дебаунса(не передавать запрос) либо в хендлере через замыкания или аргументы или this флаги мониторить и отменять - что сложнее
Мирослав
Потому что замыкание
Nikolai
Если уже есть дебаунс то нужно это контролить синхронно и отправлять ресет в этот же дебаунс
Alexey
как все сложно
Мирослав
Вот почему в реакте так любят иммутабельность
Nikolai
Дебаунс только на запрос работает
А абстракцию сделать, не?)
Nikolai
При чем тут иммутабельность?
Мирослав
А абстракцию сделать, не?)
Либо проверять ответ либо пересоздавать компоненту со стейтом
Мирослав
Ну ты такой почистил все, збс. И тут прилетает ответ
Мирослав
На каком основании его игнорировать?
Мирослав
Еще можно складывать все запросы и чистить по Promise.all()
Мирослав
Вообще при дебаунсе каждый новый запрос должен отменять предыдущий если тот не вернулся
Nikolai
Nikolai
Вообще при дебаунсе каждый новый запрос должен отменять предыдущий если тот не вернулся
логично, но мы про разные вещи говорим. у неё был вопрос про асинхронность, а не как отменить запрос.
N
см скрин
я смотрю
N
хорошо, в каком случае очищается таймаут?
N
сразу после вызова?
Nikolai
даже так получше
N
у меня ресет должен отрабатывать когда в стейте компонента (конкретно импута) значение ""
Nikolai
хорошо, в каком случае очищается таймаут?
при вызове. но Мирослав тоже прав, в том, что возможно сами запросы нужно в теле reset отменять. т.е. это нужно будет еще поле завести в котором текущий запрос или массив запросов и их обходить отменять если вызван reset
N
а сетстейт компонента отрабатывает раньше чем кидается экшен на след запрос...
N
так что тут 2 разных стейта..
Лев
Ребят, как отрисовать пропсы с 3 условями. Пробывал как на скриншоте. Но отображается только дефолтный. На сколько я понял я не так значение передаю
focus
может sortable?
Лев
точно sotrable?
Спасибо, но другие кейсы кроме дефолтного всеравно не работают :)
Лев
главное сделать первый шаг)
Заработало. Не правильно вывод написал 😩
focus
Заработало. Не правильно вывод написал 😩
я же говорил, главное сделать первый шаг)