Middle
Il y a un filtre avec des onglets. Lors du changement rapide d'onglets, il arrive que d'anciennes valeurs s'affichent, ne correspondant pas à l'onglet actuel. Quelle en est la cause et comment y remédier?
sobes.tech IA
Réponse de l'IA
Причина появления старых значений при быстром переключении табов — это асинхронные запросы, которые возвращают данные не в том порядке, в котором были отправлены. Например, запрос для таба 1 пришёл позже, чем для таба 2, но обновляет состояние, перезаписывая данные.
Как исправить:
- Отменять предыдущие запросы при переключении табов (если используется fetch API, можно применять AbortController).
- Использовать уникальные идентификаторы запросов и обновлять состояние только если ответ соответствует текущему активному табу.
- Применять локальное состояние для каждого таба, чтобы данные не перезаписывались.
Пример с AbortController:
let controller = null;
function fetchData(tabId) {
if (controller) {
controller.abort();
}
controller = new AbortController();
fetch(`/data?tab=${tabId}`, { signal: controller.signal })
.then(response => response.json())
.then(data => {
if (currentTab === tabId) {
updateUI(data);
}
})
.catch(err => {
if (err.name !== 'AbortError') {
console.error(err);
}
});
}
Такой подход гарантирует, что устаревшие запросы не повлияют на отображаемые данные.