ডকুমেন্টেশনফ্রেমওয়ার্ক পার্থক্য
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 সক্ষম করুন
from nexy.core.models import NexyConfigModelfrom nexy.frontend import preact class NexyConfig(NexyConfigModel): useFF = preact() useAliases = {"@": "src"}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__/vite.ts, তাই এটি সম্পাদনা করবেন না।
| প্যাকেজ | সংস্করণ nx new লিখেছেন |
|---|---|
preact |
^10.25.4 |
@preact/preset-vite |
^2.10.1 (দেব নির্ভরতা) |
preact-render-to-string |
^6.7.0 (দেব নির্ভরতা, সার্ভারে রেন্ডার) |
লিখুন Preact
একটি Preact উপাদান একটি প্রতিক্রিয়া-শৈলী ফাংশন। পার্থক্যগুলি এখানে গুরুত্বপূর্ণ:
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 প্রথম নামযুক্ত রপ্তানি বেছে নেয়।
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 { ComponentChildren } from "preact"; export default function RootLayout({ children }: { children: ComponentChildren }) { return ( <html> <body> <header>My app</header> <main>{children}</main> </body> </html> );}দ্বীপপুঞ্জ
সার্ভার মোডে, একটি .nexy ফাইলে আমদানি করা একটি Preact উপাদান হল একটি দ্বীপ।
আমদানি করা হচ্ছে
.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 উপাদান ব্যবহার করুন। উল্লেখ্য যে Preact className এর পরিবর্তে class ব্যবহার করে:
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");
ইউআরএল অ্যাক্সেস
usePathname(): বর্তমান পথuseParams(): গতিশীল সেগমেন্টuseSearchParams(): ক্যোয়ারী স্ট্রিংuseLocation(): সম্পূর্ণ অবস্থান বস্তু
পরবর্তী পদক্ষেপ
- ভিউ: একটি পৃষ্ঠা ব্যবহার করতে পারে এমন বিন্যাসের তুলনা করুন
- ফ্রন্টএন্ড: Vite এবং ক্লায়েন্ট বিল্ড