الوثائقاختلافات الإطار

Preact

يقوم Nexy بعرض Preact 10 مكونات على الخادم، ثم Preact يتولى إدارتها في المتصفح. الصفحات والتخطيطات والجزر والإجراءات هي نفسها في كل إطار: تغطي هذه الصفحة الإعداد، ثم الأجزاء التي تختلف عن العقود المشتركة.

الوضع nexyconfig.py الصفحات هي Preact هو
الخادم (الافتراضي) useCSR = False .nexy الملفات جزر داخل تلك الصفحات
العميل useCSR = True .tsx الملفات الصفحة بأكملها، مع التخطيطات وجهاز توجيه العميل

باستخدام جهاز التوجيه المعياري، تكون مكونات Preact هي جزر داخل طرق العرض .nexy التي ترجعها وحدة التحكم: لا يوجد ملف صفحة ولا جهاز توجيه عميل.

ابدأ مشروعًا

nx new my-app --template web-fbr-preact
nx new my-app --template web-modular-preact

القالب عبارة عن مشروع في وضع الخادم يحتوي على Preact جزر. قم بتشغيل nx new my-app بدون قالب للإجابة على المطالبات بدلاً من ذلك: جهاز التوجيه، ونوع المشروع، وما إذا كان سيتم استخدام التوجيه من جانب العميل، ثم إطار العمل.

تمكين Preact في مشروع موجود

nexyconfig.py
from nexy.core.models import NexyConfigModelfrom nexy.frontend import preact  class NexyConfig(NexyConfigModel):    useFF = preact()    useAliases = {"@": "src"}
vite.config.ts
import { defineConfig } from "vite";import preact from "@preact/preset-vite";import nexy from "./__nexy__/vite"; export default defineConfig({  plugins: [nexy(), preact()],  customLogger: nexy.log(),});

nx new يكتب هذا الملف؛ Nexy يكتب __nexy__/vite.ts نفسه، فلا تقم بتحريره.

الحزمة النسخة nx new يكتب
preact ^10.25.4
@preact/preset-vite ^2.10.1 (تبعية التطوير)
preact-render-to-string ^6.7.0 (تبعية التطوير، يتم عرضها على الخادم)

اكتب Preact

المكون Preact هو دالة بنمط التفاعل. الاختلافات المهمة هنا:

src/components/Counter.tsx
import { useState } from "preact/hooks"; export default function Counter({ start = 0 }: { start?: number }) {  const [count, setCount] = useState(start);  return <button class="counter" onClick={() => setCount(count + 1)}>{count}</button>;}
  • تأتي الخطافات من preact/hooks، وأنواع مثل ComponentChildren من preact.
  • اكتب سمات HTML: class، for، charset. Link يقرأ فصوله من class.

القواعد

  • إطار واحد لكل مشروع. useFF يأخذ إطارًا واحدًا بالضبط؛ useFF = [preact(), react()] يوقف الخادم عند بدء التشغيل. مع useFF = preact()، كل .tsx ملف هو Preact.
  • الصفحات هي .tsx. فقط ملف .tsx ضمن src/routes/ يصبح صفحة؛ .jsx جيد بالنسبة للمكون.
  • تعيش المكونات خارج src/routes/، عادةً في src/components/، لذا فهي ليست صفحات.
  • لا يحتوي مشروع وضع الخادم على .tsx صفحة، ولا يحتوي مشروع وضع العميل على .nexy صفحة: يرفض Nexy البدء ويسمي الملف. انظر الأوضاع.
  • تعيش المكونات في src/components/، ويقوم العرض باستيرادها كجزر.
  • يتم استيراد صفحة .mdx من "preact". يقوم Nexy بتجميع ملف .mdx مع Preact فقط عندما يرى هذا الاستيراد، على سبيل المثال import { h } from "preact"، ومع React بخلاف ذلك. انظر Markdown و MDX.

الصفحات

في وضع العميل (useCSR = True)، تكون الصفحة عبارة عن ملف .tsx.

مكون الصفحة

الصفحة هي التصدير الافتراضي للملف. في حالة عدم وجود تصدير افتراضي، يقوم Nexy باختيار أول عملية تصدير مسماة.

src/routes/index.tsx
export default function Home() {  return <h1>Hello</h1>;}

القطاعات الديناميكية

تتوفر معلمات URL عبر الرابط useParams:

src/routes/blog/[slug].tsx
import { useParams } from "@nexy/client"; export default function Post() {  const { slug } = useParams<{ slug: string }>();  return <h1>{slug}</h1>;}

التخطيطات

التنفيذ

يحدد التخطيط الجذر غلاف المستند. تقوم التخطيطات المتداخلة بتغليف المحتوى.

src/routes/layout.tsx
import type { ComponentChildren } from "preact"; export default function RootLayout({ children }: { children: ComponentChildren }) {  return (    <html>      <body>        <header>My app</header>        <main>{children}</main>      </body>    </html>  );}

جزر

في وضع الخادم، يكون المكون Preact المستورد في ملف .nexy عبارة عن جزيرة.

استيراد

استيراد المكونات في الجزء الأمامي من الملف .nexy:

src/routes/index.nexy
---from "@/components/Counter.tsx" import Counter---<Counter start=3 />
src/apps/home_view.nexy
---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 للانتقالات من جانب العميل. لاحظ أن Preact يستخدم class بدلاً من className:

import { Link } from "@nexy/client"; <Link href="/about" class="nav" activeClassName="active">About</Link>

للتنقل البرمجي، استخدم الخطاف useRouter:

import { useRouter } from "@nexy/client"; const router = useRouter();router.push("/dashboard");

الوصول إلى URL

  • usePathname(): المسار الحالي
  • useParams(): المقاطع الديناميكية
  • useSearchParams(): سلسلة الاستعلام
  • useLocation(): كائن الموقع الكامل

الخطوات التالية

حرِّر على GitHub

Enter يفتح النتيجة، وEsc يغلق.