DocsDiferenças de estrutura
React
Nexy renderiza React 19 componentes no servidor e, em seguida, React os hidrata 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, React 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-react
nx new my-app --template web-modular-react
O modelo é um projeto em modo servidor com React 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 React em um projeto existente
from nexy.core.models import NexyConfigModelfrom nexy.frontend import react class NexyConfig(NexyConfigModel): useFF = react() useAliases = {"@": "src"}import { defineConfig } from "vite";import react from "@vitejs/plugin-react";import nexy from "./__nexy__/vite"; export default defineConfig({ plugins: [nexy(), react()], 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 |
|---|---|
react, react-dom |
^19.2.5 |
@vitejs/plugin-react |
^5.2.0 |
@types/react, @types/react-dom |
dependências de desenvolvimento |
Regras
- Uma estrutura por projeto.
useFFleva exatamente uma estrutura;useFF = [react(), vue()]interrompe o servidor na inicialização.
- As páginas são
.tsx. React possui.tsxe.jsxpara componentes, mas apenas um arquivo.tsxemsrc/routes/se torna uma página. - 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.
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. Os layouts aninhados envolvem o conteúdo abaixo deles.
import type { ReactNode } from "react"; export default function RootLayout({ children }: { children: ReactNode }) { return ( <html> <body>{children}</body> </html> );}Ilhas
No modo servidor, um componente React 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:
import { Link } from "@nexy/client"; <Link href="/about">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