DocsDiferenças de estrutura
Preact
Nexy renderiza Preact 10 componentes no servidor e então Preact os assume no navegador. Páginas, layouts, ilhas e ações são iguais em todos os frameworks: esta página cobre a configuração e depois as partes que diferem dos contratos compartilhados.
Com o roteador modular, Preact componentes são ilhas dentro das .nexy visualizações que um controlador retorna: não há arquivo de paginação e nenhum roteador cliente.
Iniciar um projeto
nx new my-app --template web-fbr-preact
nx new my-app --template web-modular-preact
O modelo é um projeto em modo servidor com Preact ilhas. Execute nx new my-app sem um modelo para responder aos prompts: o roteador, o tipo de projeto, se deve usar roteamento do lado do cliente e, em seguida, a estrutura.
Habilite Preact em um projeto existente
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 grava este arquivo; Nexy escreve __nexy__/vite.ts sozinho, então não o edite.
| Pacote | Versão nx new escreve |
|---|---|
preact |
^10.25.4 |
@preact/preset-vite |
^2.10.1 (dependência de desenvolvimento) |
preact-render-to-string |
^6.7.0 (dependência de desenvolvimento, renderização no servidor) |
Escreva Preact
Um componente Preact é uma função no estilo React. As diferenças que importam aqui:
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>;}- Ganchos vêm de
preact/hooks, tipos comoComponentChildrendepreact. - Escreva atributos HTML:
class,for,charset.Linklê suas classes declass.
Regras
- Uma estrutura por projeto.
useFFusa exatamente uma estrutura;useFF = [preact(), react()]interrompe o servidor na inicialização. ComuseFF = preact(), todo arquivo.tsxé Preact.
- As páginas são
.tsx. Somente um arquivo.tsxemsrc/routes/se torna uma página;.jsxé adequado para um componente. - Os componentes ficam fora de
src/routes/, geralmente emsrc/components/, portanto não são páginas. - Um projeto em modo servidor não tem página
.tsx, e um projeto em modo cliente não tem página.nexy: Nexy se recusa a iniciar e nomeia o arquivo. Consulte modos.
- Os componentes residem em
src/components/, e uma visualização os importa como ilhas.
- Uma página
.mdximporta de"preact". Nexy compila um arquivo.mdxcom Preact somente quando vê essa importação, por exemploimport { h } from "preact", e com React caso contrário. Consulte Markdown e MDX.
Páginas
No modo cliente (useCSR = True), uma página é um arquivo .tsx.
Componente de página
Uma página é a exportação padrão do arquivo. Se não existir nenhuma exportação padrão, Nexy escolhe a primeira exportação nomeada.
export default function Home() { return <h1>Hello</h1>;}Segmentos dinâmicos
Os parâmetros de URL estão disponíveis através do gancho useParams:
import { useParams } from "@nexy/client"; export default function Post() { const { slug } = useParams<{ slug: string }>(); return <h1>{slug}</h1>;}Layouts
Implementação
O layout raiz define o shell do documento. Layouts aninhados envolvem o conteúdo.
import type { ComponentChildren } from "preact"; export default function RootLayout({ children }: { children: ComponentChildren }) { return ( <html> <body> <header>My app</header> <main>{children}</main> </body> </html> );}Ilhas
No modo servidor, um componente Preact importado para um arquivo .nexy é uma ilha.
Importando
Importe componentes no frontmatter do arquivo .nexy:
from "@/components/Counter.tsx" import Counter<Counter start=3 />from "@/components/Counter.tsx" import Counter<Counter start=3 />Diretrizes de hidratação
Use a propriedade directive para controlar quando a ilha hidrata:
client:load(padrão): imediatamenteclient:idle: quando o navegador está ociosoclient:visible: quando rola para visualizaçãoclient:media: quando a consulta de mídia corresponde
Ações e navegação
Chamando ações
Use o gancho useAction para gerenciar o estado de uma chamada de ação:
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>
Navegação
Use o componente Link para transições do lado do cliente. Observe que Preact usa class em vez de className:
import { Link } from "@nexy/client"; <Link href="/about" class="nav" activeClassName="active">About</Link>
Para navegação programática, use o gancho useRouter:
import { useRouter } from "@nexy/client"; const router = useRouter();router.push("/dashboard");
Acesso URL
usePathname(): caminho atualuseParams(): segmentos dinâmicosuseSearchParams(): string de consultauseLocation(): objeto de localização completo
Próximas etapas
- Visualizações: compare os formatos que uma página pode usar
- Frontend: Vite e a construção do cliente