useButtonFeedback
Bir asenkron eylemi yükleme, başarı ve hata aşamalarından geçirir; hızlı isteklerde spinner'ı atlar ve hatayı siz okurken ekranda tutar.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-button-feedback.jsonHook'u ve bağımlı olduğu her şeyi projenize ekler.
Aşağıdaki kodu kopyalayıp projenize yapıştırın.
hooks/use-button-feedback.ts İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
<Button feedback>, onClick bir promise döndürdüğünde bu akışı sizin için çalıştırır. İş başka bir yerde başladığında, örneğin bir formun onSubmit'inde, klavye kısayolunda veya blur'da hook'u kullanın. Durumun bir düğmeye ait olmadığı yerlerde de çalışır.
track() bir promise veya onu döndüren bir fonksiyon alır ve status'u idle, loading, ardından success veya error üzerinden geçirip yeniden idle'a döndürür. Sakin hissettiren şey zamanlamadır.
| Adım | Açıklama |
|---|---|
0–150ms | Durum idle kalır. Bu pencerede sonuçlanan bir istek spinner olmadan doğrudan success veya error olur. |
loading | 150ms'den itibaren gösterilir. Gösterildikten sonra en az 400ms sürer, böylece asla çakmaz. |
success | Varsayılan olarak 2 saniye tutulur, sonra idle'a döner. |
error | Varsayılan olarak 4 saniye tutulur. İşaretçi düğmenin üzerindeyken veya düğme klavye odağındayken sıfırlama, onlar ayrılana kadar artı 600ms bekler. |
- Bir istek sürerken yapılan
track()çağrıları yok sayılır; böylece çift tıklama veya basılı tutulan Enter tuşu isteği asla iki kez göndermez. track()'e verilen ve eşzamanlı hata fırlatan bir fonksiyon, reddedilmiş bir promise gibi ele alınır.reset()hemen idle'a döner. Terk edilen isteğin sonradan yaptığı her şey yok sayılır; bileşen unmount olduktan sonra sonuçlanan her şey de.- Hata bekletmesi yalnızca gerçek fare hover'ını ve klavye odağını sayar. Dokunmatikte hover yoktur ve bir tıklamanın odağı
:focus-visibledeğildir; bu yüzden hiçbiri hatayı sabitlemez.
Formlar
onSubmit içinden track() çağırın ve buttonProps'u gönder düğmesine yayın. Hatayı görmek için @ işaretini kaldırın.
Düğmesiz durum
Herhangi bir arayüzü yönlendirmek için status değerini okuyun. Bu not odağı kaybedince kaydedilir ve sonucu yanında, ekran okuyucuların duyurduğu bir role="status" bölgesinde gösterir.
resetAfter her iki sonuç için tek bir sayı veya her birini ayarlamak için bir nesne alır. error son reddetme nedenini tutar; böylece Button'ın hata ayrıntıları örneğindeki gibi etikette gösterebilirsiniz.
- Her düğmeye kendi hook'unu verin. Tek bir
buttonProps'u paylaşan iki düğme aynı durumu gösterir. onStatusChangeveonErrorher zaman verdiğiniz en son fonksiyonu çağırır, bu yüzden satır içi fonksiyonlar sorun değildir.track()dışındaki işi korumak içinisPending()kullanın. Bir ref okur, bu yüzden bir sonraki işlemeden önce bile doğrudur.
| Prop | Tür | Varsayılan |
|---|---|---|
resetAfterBaşarı ve hatanın idle'a dönmeden önce ne kadar kaldığı. | number | { success?: number; error?: number } | { success: 2000, error: 4000 } |
onStatusChangeHer durum değişikliğinde çağrılır. | (status: ButtonStatus) => void | – |
onErrorRet nedeniyle çağrılır. | (error: unknown) => void | – |
| Özellik | Açıklama |
|---|---|
track(action) | Bir promise veya onu döndüren bir fonksiyon verin. Bir istek sürerken yok sayılır. |
buttonProps | status artı işaretçi ve odak işleyicileri. <Button> üzerine veya bu işleyicileri birleştiren herhangi bir şeye yayın. |
status | "idle" | "loading" | "success" | "error" |
error | Son ret nedeni. |
reset() | Hemen idle'a döner ve süren isteği yok sayar. |
isPending() | Bir isteğin sürüp sürmediği. |
feedback prop'u üzerinden Button.