React
المكوّنات الوظيفية فقط
استخدم دائمًا مكوّنات TSX الوظيفية مع تصديرات مسمّاة.الخصائص
أنشئ نوعًا باسم{ComponentName}Props. استخدم التفكيك. لا تستخدم React.FC.
لا تستخدم نشر الخصائص من متغير واحد
إدارة الحالة
ذرات Jotai للحالة العامة
- فضّل الذرات على تمرير الخصائص عبر المستويات (prop drilling)
- لا تستخدم
useRefللحالة — استخدمuseStateأو الذرات - استخدم عائلات الذرات والمحددات للقوائم
تجنّب عمليات إعادة التصيير غير الضرورية
- انقل
useEffectوجلب البيانات إلى مكوّنات جانبية شقيقة (sidecar) - فضّل معالِجات الأحداث (
handleClick,handleChange) علىuseEffect - لا تستخدم
React.memo()— أصلِح السبب الجذري بدلًا من ذلك - حدّد استخدام
useCallback/useMemo
TypeScript
typeبدلًا منinterface— أكثر مرونة وأسهل في التركيب- النصوص الحرفية بدل التعدادات — باستثناء تعدادات codegen الخاصة بـ GraphQL وواجهات برمجة تطبيقات المكتبة الداخلية
- بدون
any— يتم فرض TypeScript الصارم - عدم استيراد الأنواع — استخدم استيرادات عادية (مفروض بواسطة Oxlint
typescript/consistent-type-imports) - استخدم Zod للتحقق وقت التشغيل من الكائنات غير محددة النوع
JavaScript
التسمية
- المتغيرات: camelCase، وصفية (
emailوليسvalue،fieldMetadataوليسfm) - الثوابت: SCREAMING_SNAKE_CASE
- الأنواع/الفئات: PascalCase
- الملفات/المجلدات: kebab-case (
.component.tsx,.service.ts,.entity.ts) - معالجات الأحداث:
handleClick(وليسonClickلدالة المعالج) - خصائص المكوّن: ابدأ باسم المكوّن (
ButtonProps) - مكوّنات Styled: ابدأ بـ
Styled(StyledTitle)
التنسيق
استخدم مكوّنات Linaria المنسقة. استخدم قيم السمة — وتجنّب القيم المضمّنة صراحة مثلpx وrem أو الألوان.
استيرادات
استخدم الأسماء المستعارة بدل المسارات النسبية:هيكلية المجلدات
- يمكن للوحدات الاستيراد من وحدات أخرى، لكن يجب أن يبقى
ui/خاليًا من التبعيات - استخدم المجلدات الفرعية
internal/للشيفرة الخاصة بالوحدة - المكوّنات أقل من 300 سطر، والخدمات أقل من 500 سطر