DocsDiferencias marco
Svelte
Nexy renderiza Svelte 5 componentes en el servidor, luego Svelte los toma en el navegador. Las páginas, diseños, islas y acciones son las mismas en todos los marcos: esta página cubre la configuración y luego las partes que difieren de los contratos compartidos.
Con el enrutador modular, los Svelte componentes son islas dentro de las .nexy vistas que devuelve un controlador: no hay ningún archivo de página ni enrutador cliente.
iniciar un proyecto
nx new my-app --template web-fbr-svelte
nx new my-app --template web-modular-svelte
La plantilla es un proyecto en modo servidor con Svelte islas. Ejecute nx new my-app sin una plantilla para responder a las indicaciones: el enrutador, el tipo de proyecto, si se utilizará el enrutamiento del lado del cliente y luego el marco.
Habilitar Svelte en un proyecto existente
from nexy.core.models import NexyConfigModelfrom nexy.frontend import svelte class NexyConfig(NexyConfigModel): useFF = svelte() useAliases = {"@": "src"}import { defineConfig } from "vite";import { svelte } from "@sveltejs/vite-plugin-svelte";import nexy from "./__nexy__/vite"; export default defineConfig({ plugins: [nexy(), svelte()], customLogger: nexy.log(),});nx new escribe este archivo; Nexy escribe __nexy__/vite.ts por sí mismo, así que no lo edites.
| Paquete | La versión nx new escribe |
|---|---|
svelte |
^5.20.2 |
@sveltejs/vite-plugin-svelte |
^5.0.0 |
Reglas
- Svelte 5. Los componentes usan runas:
$props(),$state()y fragmentos para niños. - Un marco por proyecto.
useFFtoma exactamente un marco;useFF = [svelte(), vue()]detiene el servidor al inicio. - Un componente por archivo. El nombre con el que importa un archivo
.sveltees solo la etiqueta que escribe.
- Los componentes se encuentran fuera de
src/routes/, generalmente ensrc/components/, por lo que no son páginas. - Un proyecto en modo servidor no tiene
.sveltepágina, y un proyecto en modo cliente no tiene.nexypágina: Nexy se niega a iniciar y nombra el archivo. Ver modos.
- Los componentes viven en
src/components/y una vista los importa como islas.
paginas
En modo cliente (useCSR = True), una página es un archivo .svelte.
Componente de página
La página es el componente definido por el bloque de script del archivo .svelte.
<script lang="ts"></script> <h1>Hello</h1>Segmentos dinámicos
Los parámetros de URL llegan a la página como accesorios a través de la runa $props():
<script lang="ts"> let { slug }: { slug: string } = $props();</script> <h1>{slug}</h1>Alternativamente, use la tienda $params de @nexy/client en cualquier componente.
Diseños
Implementación
El diseño raíz define el shell del documento. Los diseños anidados envuelven el contenido usando el fragmento children.
<script lang="ts"> import type { Snippet } from "svelte"; let { children }: { children?: Snippet } = $props();</script> <html> <body> <header>My app</header> <main>{@render children?.()}</main> </body></html>Islas
En modo servidor, un componente Svelte importado a un archivo .nexy es una isla.
Importando
Importe componentes en la portada del archivo .nexy:
from "@/components/Counter.svelte" import Counter<Counter start=3 />from "@/components/Counter.svelte" import Counter<Counter start=3 />Directivas de hidratación
Utilice el accesorio directive para controlar cuándo se hidrata la isla:
client:load(predeterminado): inmediatamenteclient:idle: cuando el navegador está inactivoclient:visible: cuando se desplaza a la vistaclient:media: cuando la consulta de medios coincide
Acciones y navegación
Llamar a acciones
Utilice el gancho useAction para administrar el estado de una llamada a la acción. En Svelte, esto devuelve una tienda (léase con $).
<script lang="ts"> import { useAction } from "@nexy/client"; import { add_todo } from "@nexy/actions"; let title = $state(""); const save = useAction(add_todo, { onSuccess: () => (title = "") });</script> <form onsubmit={(e) => { e.preventDefault(); save.run({ title }); }}> <input bind:value={title} /> <button disabled={$save.pending}>Add</button></form>
Navegación
Utilice el componente Link para transiciones del lado del cliente:
<script lang="ts"> import Link from "@nexy/Link.svelte";</script> <Link href="/about" activeClass="active">About</Link>
Para navegación programática, utilice el objeto router de @nexy/client:
import { router } from "@nexy/client"; router.push("/dashboard");
acceso URL
Todos los datos de ubicación se proporcionan como tiendas:
$pathname: ruta actual$params: segmentos dinámicos$searchParams: cadena de consulta$location: objeto de ubicación completa