Bir autocomplete (typeahead) arama bileşenini nasıl tasarlarsınız?
Cevap
Temel fikir: kullanıcı yazdıkça debounce edilmiş istekler atmak, sonuçları cache'lemek, race condition'ları önlemek ve bileşeni klavye ile ekran okuyucuya tam uyumlu yapmak.
Gereksinimler
- Minimum karakter sayısı (ör. 2), sonuç sayısı limiti, yüksek trafik (ör. Google arama kutusu mu, küçük bir filtre mi?).
- Sonuçlar sadece metin mi, zengin içerik (görsel, kategori) mi?
Mimari ve veri akışı
Input->useDebounce(200-300 ms) ->SearchService-> sunucu.- Cache:
Map<query, {results, timestamp}>; TTL ile ve sınırlı boyutta (LRU). Aynı sorgu tekrar yazılınca ağa gitmeden gösterilir. - Race condition: Önceki isteği
AbortControllerile iptal et veya sadece en son sorgunun cevabını uygula.
let controller: AbortController | null = null;
async function search(query: string) {
controller?.abort();
controller = new AbortController();
const res = await fetch(`/api/search?q=${encodeURIComponent(query)}&limit=10`,
{ signal: controller.signal });
return res.json();
}Bileşen API'si
<Autocomplete fetchSuggestions minChars debounceMs renderItem onSelect /> gibi esnek, headless bir API.
Erişilebilirlik
- Input
role="combobox",aria-expanded,aria-controls,aria-activedescendant. - Liste
role="listbox", öğelerrole="option"vearia-selected. - Ok tuşları ile gezinme, Enter ile seçme, Escape ile kapatma.
Optimizasyonlar
- Eşleşen kısmı vurgulama (
<mark>), boş/hata/yükleniyor durumları. - Popüler sorguları önceden yükleme, sonuç listesi uzunsa virtualization.
- Mobilde klavye ve ekran alanı, yavaş ağda iskelet (skeleton) gösterimi.
İlgili Frontend Sistem Tasarımı soruları
- Bir frontend sistem tasarımı mülakatına nasıl yaklaşırsınız? Hangi adımları izlersiniz?
- Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?
- Çok dilli (i18n) bir frontend uygulamasını nasıl tasarlarsınız?
- Micro-frontend mimarisi nedir? Ne zaman tercih edilir, dezavantajları nelerdir?
- Büyük bir React uygulamasında state management mimarisini nasıl kurgularsınız?
- Şirket genelinde kullanılacak bir design system / component library nasıl kurarsınız?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.