logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Previous PageContexto
Next PageControl de permisos (ACL)
Aviso de traducción por IA

Esta documentación ha sido traducida automáticamente por IA.

#Router

El cliente de NocoBase le ofrece un gestor de rutas flexible que le permite extender páginas y páginas de configuración de plugins mediante router.add() y pluginSettingsRouter.add().

#Rutas de página predeterminadas

NombreRutaComponenteDescripción
admin/admin/*AdminLayoutPáginas de administración
admin.page/admin/:nameAdminDynamicPagePáginas creadas dinámicamente
admin.settings/admin/settings/*AdminSettingsLayoutPáginas de configuración de plugins

#Extensión de páginas generales

Agrega rutas de páginas normales mediante router.add(). Para los componentes de página, usa componentLoader para registrarlos bajo demanda, de modo que el módulo de la página solo se cargue cuando realmente se visite la ruta.

Los archivos de página deben usar export default:

// routes/HomePage.tsx
export default function HomePage() {
  return <h1>Home</h1>;
}
import { Link, Outlet } from 'react-router-dom';
import { Application, Plugin } from '@nocobase/client';

const Layout = () => (
  <div>
    <div>
      <Link to="/">Home</Link> | <Link to="/about">About</Link>
    </div>
    <Outlet />
  </div>
);

class MyPlugin extends Plugin {
  async load() {
    this.router.add('root', { element: <Layout /> });

    this.router.add('root.home', {
      path: '/',
      // Importación dinámica: el módulo de la página solo se carga cuando se entra en esta ruta
      componentLoader: () => import('./routes/HomePage'),
    });

    this.router.add('root.about', {
      path: '/about',
      componentLoader: () => import('./routes/AboutPage'),
    });
  }
}

const app = new Application({
  router: { type: 'memory', initialEntries: ['/'] },
  plugins: [MyPlugin]
});

export default app.getRootComponent();

Admite parámetros dinámicos

this.router.add('root.user', {
  path: '/user/:id',
  element: ({ params }) => <div>User ID: {params.id}</div>
});

Si la página es pesada o no es necesaria en el primer renderizado, se recomienda priorizar componentLoader; element sigue siendo adecuado para rutas de diseño o páginas en línea muy ligeras.

#Extensión de páginas de configuración de plugins

Agrega páginas de configuración del plugin mediante pluginSettingsRouter.add(). Al igual que las rutas de páginas normales, las páginas de configuración también deben usar componentLoader para el registro bajo demanda.

import { Plugin } from '@nocobase/client';

export class HelloPlugin extends Plugin {
  async load() {
    this.pluginSettingsRouter.add('hello', {
      title: 'Hello', // Título de la página de configuración
      icon: 'ApiOutlined', // Icono del menú de la página de configuración
      // Importación dinámica: el módulo de la página solo se carga cuando se entra en esta página de configuración
      componentLoader: () => import('./settings/HelloSettingPage'),
    });
  }
}

Ejemplo de rutas multinivel

import { Outlet } from 'react-router-dom';

const pluginName = 'hello';

class HelloPlugin extends Plugin {
  async load() {
    // Ruta de nivel superior
    this.pluginSettingsRouter.add(pluginName, {
      title: 'HelloWorld',
      icon: '',
      element: <Outlet />,
    });

    // Rutas secundarias
    this.pluginSettingsRouter.add(`${pluginName}.demo1`, {
      title: 'Demo1 Page',
      // Importación dinámica: el módulo de la página solo se carga cuando se entra en esta página de configuración
      componentLoader: () => import('./settings/Demo1Page'),
    });

    this.pluginSettingsRouter.add(`${pluginName}.demo2`, {
      title: 'Demo2 Page',
      componentLoader: () => import('./settings/Demo2Page'),
    });
  }
}