Field
Tek bir kontrolü etiketi, yardım metni ve hata mesajıyla birlikte sarar ve bunları context üzerinden birbirine bağlar: htmlFor, aria-describedby, aria-invalid, required ve disabled.
Yalnızca makbuzlar için kullanıyoruz.
<Field label="E-posta" description="Yalnızca makbuzlar için kullanıyoruz.">
<Input type="email" placeholder="sen@sirket.com" />
</Field>Import
import { Field } from "@merid/react";Örnekler
Hata
error verildiğinde kontrol aria-invalid="true" ve geçersiz stilini alır, mesaj da aria-describedby'ına eklenir. Temizlemek için undefined, null ya da false ver.
Bu kullanıcı adı alınmış.
<Field label="Kullanıcı adı" error="Bu kullanıcı adı alınmış." required>
<Input defaultValue="ahmet" />
</Field>Controlled input
Değeri Field tutmaz. Child'ı her zamanki gibi kontrol et, error'u da kendi state'inden türet.
Kenar çubuğunda görünür.
const [name, setName] = useState("");
const error = name.length > 0 && name.length < 3 ? "En az 3 karakter kullan." : undefined;
<Field label="Proje adı" description="Kenar çubuğunda görünür." error={error}>
<Input value={name} onChange={(event) => setName(event.target.value)} />
</Field>Uncontrolled input
defaultValue ve name ile kontrol kendi state'ini tutar ve formla birlikte gönderilir.
<Field label="Hakkında">
<Textarea name="bio" defaultValue="İstanbul'da tasarımcı." />
</Field>Devre dışı
disabled kontrolü devre dışı bırakır ve etiketi soluklaştırır.
<Field label="Plan" disabled>
<NativeSelect defaultValue="team">
<option value="free">Ücretsiz</option>
<option value="team">Ekip</option>
</NativeSelect>
</Field>Field'ı hangi kontroller okur
Input, Textarea ve NativeSelect bağlantıların tamamını okur. Kontrolün kendisine verilen prop'lar her zaman Field'ınkilerin önüne geçer.
- Checkbox adını Field etiketinden alır. Kendi children'ı yine tıklanabilir bir etiket olarak render'lanır ama açıklamasına (
aria-describedby) dönüşür; böylece hiçbir zaman iki kez etiketlenmez. - Switch, Field id'sini (böylece Field etiketi onu adlandırır),
aria-describedby,aria-invalidvedisabled'ı alır. - RadioGroup adını Field etiketinden alır (
aria-labelledby); açıklamasını, hatasını,requiredvedisabled'ı da devralır.
Her kontrol aynı kurala uyar: semantiği aria-invalid taşır, stili data-invalid yönetir.
API referansı
Field bir <div> render'lar, ref'ini iletir ve diğer div attribute'larını olduğu gibi geçirir.
| Prop | Tip | Varsayılan | Açıklama |
|---|---|---|---|
labelZorunlu | ReactNode | – | Görünen etiket, htmlFor ile kontrole bağlanır. |
childrenZorunlu | ReactNode | – | Tek bir Merid kontrolü; bağlantıları context'ten alır. |
description | ReactNode | – | Kontrolün altındaki yardım metni, aria-describedby ile bağlanır. |
error | ReactNode | – | Hata mesajı. Kontrole aria-invalid atar ve mesajı bağlar. |
required | boolean | false | Kontrolü zorunlu yapar ve görsel işareti gösterir. |
disabled | boolean | false | Kontrolü devre dışı bırakır ve etiketi soluklaştırır. |
id | string | – | Kontrol için açık bir id. Verilmezse üretilir. |
Özel kontroller için useFieldContext() bağlantı bilgilerini (controlId, labelId, descriptionId, errorId, invalid, required, disabled) döndürür; Field dışında null döner.
Stil verme
| Seçici | Değerler |
|---|---|
.mrd-field | Kök <div> |
.mrd-field__description | Yardım metni |
.mrd-field__error | Hata mesajı |
data-invalid | error verildiğinde bulunur |
data-disabled | disabled olduğunda bulunur |
Etiket bir Label'dır (.mrd-label).
Erişilebilirlik
- Etiket kontrolü adlandırır; açıklama ve hata,
aria-describedbyüzerinden ondan sonra okunur. - Hata bir live region değildir. Gönderimde doğrulama yapıyorsan mesaj duyurulsun diye focus'u ilk geçersiz kontrole taşı.
requiredkontrolün kendisine atanır; böylece ekran okuyucu bunu duyurur ve native doğrulama devreye girer.
Kullanım ilkeleri
Yap
Sorunun nasıl düzeltileceğini söyleyen hata mesajları yaz: “En az 3 karakter kullan.”
Kaçın
“Geçersiz giriş” göstermek ya da bir Field'ın içine birden fazla kontrol koymak.
İlgili sayfalar
- Label: Field'ın render'ladığı etiket.
- Input, Textarea, NativeSelect, Checkbox, Switch, RadioGroup: Field'ı okuyan kontroller.