how-to-write-component
Use when implementing or refactoring React/TypeScript components and the task requires decisions about component ownership, feature boundaries, state, data flow, effects, or interaction ownership. Do not use for review-only requests, test-only work, copy-only edits, or styling-only changes.étoiles157629
forks24865
observateurs157629
mise à jour2026-10-01 05:36:38
How To Write A Component
Use this skill to route component architecture decisions to its bundled references. Read only the references required by the current change.
Topic Routing
- Component moves, module boundaries, props, types, or owner placement: read
references/ownership.md. - Dify UI wrappers or primitive state styling: read the package's Public API authoring and Styling contracts.
- Jotai, form drafts, route identity, URL state, or persistence: read
references/state.md. - Generated contracts, nullable API data, Query, mutations, SSR, auth, or workspace state: read
references/data.md. - Hotkeys, focus, dialogs, menus, popovers, or other secondary surfaces: read
references/interactions.mdand the overlay guide it references when applicable. Also readreferences/state.mdwhen the surface owns a draft or other local session state. - Effects, navigation, memoization, preloading, or render cost: read
references/runtime.md.
Scope And Verification
Identify the behavior owner, state lifetime, and public contract from the nearby implementation and relevant references. Keep the change within that vertical slice unless the contract requires changes elsewhere. Verify the changed behavior and complete the owning package's required checks. For Web, read web/docs/test.md for test work and web/docs/lint.md for static checks. Dify UI verification is owned by packages/dify-ui/docs/testing.md.
Tailwind CSS
- Write canonical Tailwind v4 classes; prefer canonical utilities over equivalent arbitrary values.
- Common forms include
w-105instead ofw-[420px],px-2.25instead ofpx-[9px],bg-linear-to-binstead ofbg-gradient-to-b,wrap-break-wordinstead ofbreak-words, andfield-sizing-contentinstead of[field-sizing:content].