logologo
Start
Handbuch
Entwicklung
Plugins
API
Startseite
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Start
Handbuch
Entwicklung
Plugins
API
Startseite
logologo

Schnellstart

Plugin-Entwicklung: Überblick
Erstes Plugin schreiben
Projektverzeichnisstruktur

Serverseitige Entwicklung

Überblick
Plugin
Collections (Datentabellen)
Datenbankoperationen
DataSourceManager
ResourceManager
ACL-Zugriffskontrolle
Middleware
Cache
Events
Request-Kontext
Migration (Update-Skripte)
Logger (Protokollierung)
I18n (Internationalisierung)
Command (Befehlszeile)
CronJobManager
Tests

Clientseitige Entwicklung

Überblick
Plugin
Kontext
Router
ACL-Zugriffskontrolle
DataSourceManager
Ressourcen
Requests
Stile & Themes
Logger (Protokollierung)
I18n (Internationalisierung)
Tests

Sonstiges

Plugin-Update-Leitfaden
Sprachenliste
Abhängigkeitsverwaltung
Build
Previous PageKontext
Next PageACL-Zugriffskontrolle
KI-Übersetzungshinweis

Diese Dokumentation wurde automatisch von KI übersetzt.

#Router

Der NocoBase-Client bietet einen flexiblen Router-Manager, der es Ihnen ermöglicht, Seiten und Plugin-Einstellungsseiten mithilfe von router.add() und pluginSettingsRouter.add() zu erweitern.

#Registrierte Standard-Seitenrouten

NamePfadKomponenteBeschreibung
admin/admin/*AdminLayoutAdmin-Seiten
admin.page/admin/:nameAdminDynamicPageDynamisch erstellte Seiten
admin.settings/admin/settings/*AdminSettingsLayoutPlugin-Einstellungsseiten

#Erweitern von Standardseiten

Sie können reguläre Seitenrouten mit router.add() hinzufügen. Für Seitenkomponenten sollte componentLoader verwendet werden, damit das Seitenmodul erst geladen wird, wenn die Route tatsächlich aufgerufen wird.

Seitendateien müssen export default verwenden:

// 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: '/',
      // Dynamischer Import: Das Seitenmodul wird erst geladen, wenn diese Route betreten wird
      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();

Unterstützt dynamische Parameter

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

Wenn eine Seite umfangreicher ist oder nicht beim ersten Rendern benötigt wird, sollte componentLoader bevorzugt werden. element eignet sich weiterhin für Layout-Routen oder sehr leichte Inline-Seiten.

#Erweitern von Plugin-Einstellungsseiten

Sie können Plugin-Einstellungsseiten mit pluginSettingsRouter.add() hinzufügen. Wie bei normalen Routen sollte auch hier componentLoader verwendet werden.

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

export class HelloPlugin extends Plugin {
  async load() {
    this.pluginSettingsRouter.add('hello', {
      title: 'Hello', // Titel der Einstellungsseite
      icon: 'ApiOutlined', // Menüsymbol der Einstellungsseite
      // Dynamischer Import: Das Seitenmodul wird erst geladen, wenn diese Einstellungsseite betreten wird
      componentLoader: () => import('./settings/HelloSettingPage'),
    });
  }
}

Mehrstufiges Routing-Beispiel

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

const pluginName = 'hello';

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

    // Unterrouten
    this.pluginSettingsRouter.add(`${pluginName}.demo1`, {
      title: 'Demo1 Page',
      // Dynamischer Import: Das Seitenmodul wird erst geladen, wenn diese Einstellungsseite betreten wird
      componentLoader: () => import('./settings/Demo1Page'),
    });

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