„React“ vadovas

Tipizuoti funkciniai komponentai, po vieną bylą, valdomi standartiniu šablonu value + onChange — viskas veikia taip, kaip „React“ jau veikia.

Ką sukursite

Nedidelė kontaktų forma — laukas su žyma, siuntimo mygtukas, valdoma būsena, tikras klaviatūros ir ekrano skaitytuvo elgesys — pirma plika, paskui apipavidalinta, per maždaug 10 minučių.

Prieš pradedant

Reikia git, Node 22 ar naujesnės ir pnpm 10 ar naujesnio. Tinka bet kuris „React 18+“ projektas — „Next.js“, „Vite“ arba paprastas „React“.

1 žingsnis — Gaukite kodą

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install
pnpm test        # vitest + @testing-library/react
pnpm run storybook   # browse all 571 components

Komponentai yra plokščios bylos aplanke components/ — Button.tsx, TextInput.tsx — kiekvienas su savo testu, story ir dokumentacija šalia. Nukopijuokite reikalingas bylas į savo programą arba pasiimkite saugyklą ir importuokite iš jos.

2 žingsnis — Jūsų pirmasis komponentas

import Button from "lily-design-system-react-headless/components/Button";

export function SaveBar() {
  return <Button onClick={save}>Save</Button>;
}

Atvaizduoja <button class="button" type="button">. Propai: type, disabled, pressed (atvaizduoja aria-pressed), label ( aria-label norint pakeisti), className, o bet koks papildomas atributas paskleidžiamas ant šakninio elemento.

3 žingsnis — Sudėkite nedidelę formą

import { useState } from "react";
import Form from ".../components/Form";
import Field from ".../components/Field";
import TextInput from ".../components/TextInput";
import Button from ".../components/Button";

export function ContactForm() {
  const [name, setName] = useState("");
  return (
    <Form label="Contact form" onSubmit={handleSubmit}>
      <Field label="Full name" required>
        <TextInput id="name" label="Full name" value={name} onChange={setName} required />
      </Field>
      <Button type="submit">Save</Button>
    </Form>
  );
}

Field priima matomą label kaip savo prop vietoj įdėto žymos komponento — perduokite ją vieną kartą, prie Fieldir TextInputiš label suteikia prieinamą pavadinimą.

Patikrinta 2026-08-29: ankstesnis juodraštis įdėjo atskirą Label viduje Field, todėl buvo atvaizduotos dvi žymos (viena tuščia), nes Field jau pats atvaizduoja savo iš label prop — pastebėta sukompiliavus tikslų fragmentą. Maršrutas Sudėtinis kontaktų formos maršrutas yra tas pats šablonas, išbandytas tikrais e2e ir axe testais.

4 žingsnis — Apipavidalinkite

Viskas aukščiau atvaizduojama kaip gryna struktūra, paruošta jūsų stiliams. Apipavidalinkite kablius — .button, .text-input, .label, .field — savo stilių lentelėje, uždėkite „Tailwind“ pagalbines klases per classNamearba susiekite paruoštą temą:

<link rel="stylesheet" href="/themes/united-states-web-design-system.css" />

5 žingsnis — Pažiūrėkite, kaip viskas veikia

„Next.js“ pavyzdinė programa yra visas katalogas apipavidalintas ir pademonstruotas, su „Playwright“ e2e ir axe-core pradine riba:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-next-examples
pnpm install && pnpm run dev

Tolesni žingsniai

Klausimų pakeliui? Pagalbos puslapis pilnas atsakymų — o jei kuris nors žingsnis galėtų būti aiškesnis, pasakykite mums ir mielai patobulinsime vadovą.