DokumentasiPerbedaan kerangka
Vue
Nexy merender Vue 3 komponen file tunggal di server, lalu Vue mengambil alihnya di browser. Halaman, tata letak, pulau, dan tindakan sama di setiap kerangka kerja: halaman ini mencakup penyiapan, lalu bagian-bagian yang berbeda dari kontrak bersama.
| Modus | nexyconfig.py |
Halaman adalah | Vue adalah |
|---|---|---|---|
| Server (bawaan) | useCSR = False |
.nexy file |
pulau di dalam halaman tersebut |
| Klien | useCSR = True |
.vue file |
seluruh halaman, dengan tata letak dan router klien |
Dengan router modular, komponen Vue adalah pulau di dalam tampilan .nexy yang dikembalikan oleh pengontrol: tidak ada file halaman dan tidak ada router klien.
Mulai sebuah proyek
nx new my-app --template web-fbr-vue
nx new my-app --template web-modular-vue
Templatnya adalah proyek mode server dengan pulau Vue. Jalankan nx new my-app tanpa templat untuk menjawab petunjuknya: router, jenis proyek, apakah akan menggunakan perutean sisi klien, lalu kerangka kerja.
Aktifkan Vue di proyek yang sudah ada
from nexy.core.models import NexyConfigModelfrom nexy.frontend import vue class NexyConfig(NexyConfigModel): useFF = vue() useAliases = {"@": "src"}import { defineConfig } from "vite";import vue from "@vitejs/plugin-vue";import nexy from "./__nexy__/vite"; export default defineConfig({ plugins: [nexy(), vue()], customLogger: nexy.log(),});nx new menulis file ini; Nexy menulis __nexy__/vite.ts sendiri, jadi jangan diedit.
| Paket | Versi nx new menulis |
|---|---|
vue |
^3.5.33 |
@vitejs/plugin-vue |
^6.0.0 |
Aturan
- Satu kerangka kerja per proyek.
useFFmembutuhkan tepat satu kerangka kerja;useFF = [vue(), react()]menghentikan server saat startup. - Satu komponen per file. File
.vuemengekspor komponennya sebagai default; nama yang Anda impor hanyalah tag yang Anda tulis.
- Komponen berada di luar
src/routes/, biasanya disrc/components/, jadi bukan halaman. - Proyek mode server tidak memiliki halaman
.vue, dan proyek mode klien tidak memiliki halaman.nexy: Nexy menolak untuk memulai dan memberi nama file. Lihat mode.
- Komponen berada di
src/components/, dan pandangan mengimpornya sebagai pulau.
Halaman
Dalam mode klien (useCSR = True), halaman adalah file .vue.
Komponen halaman
Halaman adalah komponen yang ditentukan oleh blok <script setup>.
<template> <h1>Hello</h1></template>Segmen dinamis
Parameter URL mencapai halaman sebagai alat peraga. Anda dapat mendeklarasikannya menggunakan defineProps:
<script setup lang="ts">defineProps<{ slug: string }>();</script> <template> <h1>{{ slug }}</h1></template>Alternatifnya, gunakan kait useParams dari @nexy/client di komponen mana pun.
Tata Letak
Implementasi
Tata letak root mendefinisikan shell dokumen. Tata letak bersarang membungkus konten dalam slot defaultnya.
<template> <html> <body> <header>My app</header> <main><slot /></main> </body> </html></template>Pulau
Dalam mode server, komponen Vue yang diimpor ke file .nexy adalah sebuah pulau.
Mengimpor
Impor komponen di frontmatter file .nexy:
from "@/components/Counter.vue" import Counter<Counter start=3 />from "@/components/Counter.vue" import Counter<Counter start=3 />Arahan hidrasi
Gunakan prop directive untuk mengontrol kapan pulau terhidrasi:
client:load(default): segeraclient:idle: saat browser dalam keadaan idleclient:visible: saat bergulir hingga terlihatclient:media: ketika kueri media cocok
Tindakan dan navigasi
Memanggil tindakan
Gunakan hook useAction untuk mengelola status panggilan tindakan. Di Vue, status yang dikembalikan (pending, data, error) adalah referensi yang dihitung.
<script setup lang="ts">import { ref } from "vue";import { useAction } from "@nexy/client";import { add_todo } from "@nexy/actions"; const title = ref("");const { run, pending, error, data } = useAction(add_todo, { onSuccess: () => (title.value = ""),});</script> <template> <form @submit.prevent="run({ title })"> <input v-model="title" /> <button :disabled="pending">Add</button> </form></template>
Navigasi
Gunakan komponen Link untuk transisi sisi klien:
<template> <Link href="/about" active-class="active">About</Link></template>
Untuk navigasi terprogram, gunakan kait useRouter:
import { useRouter } from "@nexy/client"; const router = useRouter();router.push("/dashboard");
Akses URL
Semua kait lokasi mengembalikan referensi yang dihitung:
usePathname(): jalur saat iniuseParams(): segmen dinamisuseSearchParams(): string kueriuseLocation(): objek lokasi penuh