Prezentare generală
Primitivele sunt controalele fundamentale din Twenty UI. Acestea includ elemente de intrare, elemente de afișare, navigare și controale compuse, cum ar fi Select, Popover și AlertDialog. Fiecare primitivă primește date și funcții callback de la aplicația dvs. Importați primitive dintr-un punct de intrare al familiei, cum ar fitwenty-ui/primitives/input. Punctul de intrare agregat twenty-ui/primitives exportă, de asemenea, fiecare familie de primitive. Consultați Noțiuni introductive pentru instalare și configurarea temei.
Componente combină aceste primitive în presetări de design partajate și elemente reutilizabile de construcție a aplicațiilor.
Proprietatea asupra stării
Folosiți starea necontrolată atunci când un component își poate gestiona propriile interacțiuni. O proprietate implicită furnizează starea inițială. Folosiți starea controlată atunci când aplicația trebuie să coordoneze acea stare cu alte controale, navigarea sau datele aplicației.
În modul controlat, transmiteți starea curentă și actualizați-o în callbackul de schimbare. În modul necontrolat, puteți în continuare să monitorizați modificările fără a prelua proprietatea asupra stării. Adăugarea unui callback singur nu face ca un component să fie controlat.
Alegeți un mod pentru fiecare stare și păstrați-l pe durata de viață a componentului. Proprietățile implicite inițializează starea; modificarea lor ulterioară nu înlocuiește starea curentă. Evitați transmiterea atât a proprietății implicite, cât și a celei controlate pentru aceeași stare.
Unele componente au mai multe stări independente. De exemplu, Select poate avea o valoare controlată și o vizibilitate necontrolată a ferestrei popup.
Starea aparține părții care gestionează interacțiunea. Configurați selecția butoanelor radio în RadioGroup, nu în fiecare Radio. Componentele de afișare, precum Text, nu au un mod controlat sau necontrolat. Toast deleagă aplicației gestionarea vizibilității și eliminării sale.
Compoziție
Primitivele compuse expun părți precumSelect.Root, Select.Trigger și Select.Popup. Păstrați părțile asociate sub aceeași rădăcină în arborele de componente, astfel încât să partajeze starea și relațiile de accesibilitate. Secțiunea de anatomie a fiecărei componente identifică părțile necesare și conținutul opțional.
Sloturile precum InputGroup.startElement și ListItem.actions acceptă noduri React ca props. Acestea adaugă conținut în structura unei componente. Părțile și sloturile sunt API-uri diferite; utilizați numele enumerate în ghidul componentei.
Compoziția popupului
Select, Popover și Autocomplete expun părți separatePortal, Positioner și Popup:
Imbricați Popup în Positioner și Positioner în Portal. Plasați conținutul în Popup și adăugați Arrow în mod explicit atunci când este necesar. Portal poate muta DOM-ul randat într-un alt container, păstrând ierarhia și contextul componentelor. Consultați tematizarea pentru containere portal cu domeniu de aplicare.
Fiecare parte randată își păstrează propriile atribute native, ținta ref și compoziția de randare. Autocomplete păstrează, de asemenea, părțile instalate upstream pentru colecție, grupare, grilă, filtrare și stare.
Dialog și AlertDialog expun părți separate
Portal, Backdrop, Viewport și Popup. Configurează montarea și destinația pentru Portal, aspectul suprapunerii pentru Backdrop și Viewport, precum și dimensiunea și focalizarea conținutului pentru Popup. Fiecare parte își păstrează propriile atribute native, ținta ref și compoziția de randare. Aceste API-uri de dialog sunt pentru UI independentă și gazda Twenty. Componentele Front utilizează API-ul de dialog al gazdei SDK.
Componente personalizate
Pentru părțile care acceptărender, transmiteți un element sau o componentă compatibilă pentru a înlocui elementul implicit. De exemplu, Popover.Trigger poate utiliza un Button Twenty UI, păstrându-și comportamentul de declanșator.
Un înveliș personalizat trebuie să transmită proprietățile și ref furnizate către elementul interactiv. Acest lucru păstrează gestionarele de evenimente, atributele de accesibilitate, poziționarea și restabilirea focalizării. Acest exemplu le redirecționează prin Button, care le atașează butonului său nativ.
render și păstrați fiecare acțiune ca un singur control interactiv. Păstrați gestionarele și ref furnizate învelișului dvs. când adăugați propriul comportament. Ref trebuie să ajungă la elementul care primește focalizarea.
Utilizați un buton nativ pentru părțile de tip buton. Pentru părțile care expun nativeButton, setați nativeButton={false} numai atunci când elementul randat nu este un buton nativ. O componentă personalizată care randează în cele din urmă un buton, precum HelpButton, păstrează comportamentul implicit al butonului.