الوثائقاختلافات الإطار
React
يعرض Nexy React 19 مكونًا على الخادم، ثم React يرطبها في المتصفح. الصفحات والتخطيطات والجزر والإجراءات هي نفسها في كل إطار: تغطي هذه الصفحة الإعداد، ثم الأجزاء التي تختلف عن العقود المشتركة.
باستخدام جهاز التوجيه المعياري، تكون مكونات React هي جزر داخل طرق العرض .nexy التي ترجعها وحدة التحكم: لا يوجد ملف صفحة ولا جهاز توجيه عميل.
ابدأ مشروعًا
nx new my-app --template web-fbr-react
nx new my-app --template web-modular-react
القالب عبارة عن مشروع في وضع الخادم يحتوي على React جزر. قم بتشغيل nx new my-app بدون قالب للإجابة على المطالبات بدلاً من ذلك: جهاز التوجيه، ونوع المشروع، وما إذا كان سيتم استخدام التوجيه من جانب العميل، ثم إطار العمل.
تمكين React في مشروع موجود
from nexy.core.models import NexyConfigModelfrom nexy.frontend import react class NexyConfig(NexyConfigModel): useFF = react() useAliases = {"@": "src"}import { defineConfig } from "vite";import react from "@vitejs/plugin-react";import nexy from "./__nexy__/vite"; export default defineConfig({ plugins: [nexy(), react()], customLogger: nexy.log(),});nx new يكتب هذا الملف؛ Nexy يكتب __nexy__/vite.ts نفسه، فلا تقم بتحريره.
| الحزمة | النسخة nx new يكتب |
|---|---|
react، react-dom |
^19.2.5 |
@vitejs/plugin-react |
^5.2.0 |
@types/react، @types/react-dom |
تبعيات التطوير |
القواعد
- إطار واحد لكل مشروع.
useFFيأخذ إطارًا واحدًا بالضبط؛useFF = [react(), vue()]يوقف الخادم عند بدء التشغيل.
- الصفحات هي
.tsx. React تمتلك.tsxو.jsxللمكونات، ولكن فقط الملف.tsxضمنsrc/routes/يصبح صفحة. - تعيش المكونات خارج
src/routes/، عادةً فيsrc/components/، لذا فهي ليست صفحات. - لا يحتوي مشروع وضع الخادم على
.tsxصفحة، ولا يحتوي مشروع وضع العميل على.nexyصفحة: يرفض Nexy البدء ويسمي الملف. انظر الأوضاع.
- تعيش المكونات في
src/components/، ويقوم العرض باستيرادها كجزر.
الصفحات
في وضع العميل (useCSR = True)، تكون الصفحة عبارة عن ملف .tsx.
مكون الصفحة
الصفحة هي التصدير الافتراضي للملف. في حالة عدم وجود تصدير افتراضي، يقوم Nexy باختيار أول عملية تصدير مسماة.
export default function Home() { return <h1>Hello</h1>;}القطاعات الديناميكية
تتوفر معلمات URL عبر الرابط useParams:
import { useParams } from "@nexy/client"; export default function Post() { const { slug } = useParams<{ slug: string }>(); return <h1>{slug}</h1>;}التخطيطات
التنفيذ
يحدد التخطيط الجذر غلاف المستند. تقوم التخطيطات المتداخلة بتغليف المحتوى الموجود أسفلها.
import type { ReactNode } from "react"; export default function RootLayout({ children }: { children: ReactNode }) { return ( <html> <body>{children}</body> </html> );}جزر
في وضع الخادم، يكون المكون React المستورد في ملف .nexy عبارة عن جزيرة.
استيراد
استيراد المكونات في الجزء الأمامي من الملف .nexy:
from "@/components/Counter.tsx" import Counter<Counter start=3 />from "@/components/Counter.tsx" import Counter<Counter start=3 />توجيهات الترطيب
استخدم الدعامة directive للتحكم في وقت ترطيب الجزيرة:
client:load(افتراضي): فورًاclient:idle: عندما يكون المتصفح خاملاًclient:visible: عند التمرير إلى العرضclient:media: عند تطابق استعلام الوسائط
الإجراءات والملاحة
إجراءات الدعوة
استخدم الخطاف useAction لإدارة حالة استدعاء الإجراء:
import { useAction } from "@nexy/client";import { add_todo } from "@nexy/actions"; const { run, pending, error, data } = useAction(add_todo);// ...<button onClick={() => run({ title: "New Task" })}>Add</button>
الملاحة
استخدم المكون Link للانتقالات من جانب العميل:
import { Link } from "@nexy/client"; <Link href="/about">About</Link>
للتنقل البرمجي، استخدم الخطاف useRouter:
import { useRouter } from "@nexy/client"; const router = useRouter();router.push("/dashboard");
الوصول إلى URL
usePathname(): المسار الحاليuseParams(): المقاطع الديناميكيةuseSearchParams(): سلسلة الاستعلامuseLocation(): كائن الموقع الكامل
الخطوات التالية
- طرق العرض: قارن التنسيقات التي يمكن للصفحة استخدامها
- الواجهة الأمامية: Vite وبناء العميل