CodeBlanks Logo Icon CodeBlanks

Meydan okuma: Concurrent arama

useDeferredValue ile akıcı çalışan bir arama yazarsın.

Meydan okuma: Concurrent arama

Bu meydan okumada useTransition ile concurrent bir arama kutusu yazacaksın. Input akıcı kalırken arama arka planda yapılır.

isPending ile bekleme sırasında bir yükleniyor göstergesi gösterilir. Sonuçlar bir listede sıralanır. Büyük listelerde bile uygulama donmaz. Kullanıcı yazdıkça sonuçlar aşamalı olarak güncellenir.

Uygulama SearchBox bileşenini yaz

SearchBox yaz. useState ve useTransition içe aktar. useState('') ile query, useTransition ile isPending ve startTransition. items.filter(i => i.includes(query)) ile results. <input value={query} onChange={e => startTransition(() => setQuery(e.target.value))} /> ve isPending ? <p>Aranıyor</p> : <ul>{results.map((r, i) => <li key={i}>{r}</li>)}</ul>. Dışa aktar.

Başlangıç kodu

App.jsx
// SearchBox bileşenini buraya yaz

Örnek çözüm

App.jsx
import { useState, useTransition } from 'react';

function SearchBox({ items }) {
  const [query, setQuery] = useState('');
  const [isPending, startTransition] = useTransition();
  const results = items.filter(i => i.includes(query));
  return (
    <div>
      <input value={query} onChange={e => startTransition(() => setQuery(e.target.value))} />
      {isPending ? <p>Aranıyor</p> : <ul>{results.map((r, i) => <li key={i}>{r}</li>)}</ul>}
    </div>
  );
}
export default SearchBox;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 useTransition ne döndürür?

  • [state, setState]
  • [value, setValue]
  • [isPending, startTransition] Doğru cevap
  • [ref, setRef]

Açıklama: useTransition [isPending, startTransition] döndürür.

2 Boşluğu doldur: input onChange içinde transition

Soru
<input value={query} onChange={e => ____(() => setQuery(e.target.value))} />
Cevap
<input value={query} onChange={e => startTransition(() => setQuery(e.target.value))} />

Açıklama: startTransition ile güncelleme ertelenir.

Uzman seviye bölümündeki tüm dersler