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

Globale Variablen

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.openView()
Next Pagectx.request()
KI-Übersetzungshinweis

Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.

#ctx.render()

Rendert React-Elemente, HTML-Strings oder DOM-Knoten in einen angegebenen Container. Wenn container nicht angegeben wird, erfolgt das Rendering standardmäßig in ctx.element, wobei der Kontext der Anwendung (wie ConfigProvider und Themes) automatisch übernommen wird.

#Anwendungsszenarien

SzenarioBeschreibung
JSBlockRendern von benutzerdefinierten Block-Inhalten (Diagramme, Listen, Karten usw.)
JSField / JSItem / JSColumnRendern benutzerdefinierter Darstellungen für bearbeitbare Felder oder Tabellenspalten
Details-BlockAnpassung des Anzeigeformats von Feldern in Detailseiten

Hinweis: ctx.render() benötigt einen Rendering-Container. Wenn container nicht übergeben wird und ctx.element nicht existiert (z. B. in rein logischen Szenarien ohne Benutzeroberfläche), wird ein Fehler ausgegeben.

#Typdefinition

render(
  vnode: React.ReactElement | Node | DocumentFragment | string,
  container?: Element | DocumentFragment
): ReactDOMClient.Root | null;
ParameterTypBeschreibung
vnodeReact.ReactElement | Node | DocumentFragment | stringZu rendernder Inhalt
containerElement | DocumentFragment (Optional)Ziel-Container für das Rendering, Standard ist ctx.element

Rückgabewert:

  • Beim Rendern eines React-Elements: Gibt ReactDOMClient.Root zurück, um spätere Aktualisierungen über root.render() zu ermöglichen.
  • Beim Rendern eines HTML-Strings oder DOM-Knotens: Gibt null zurück.

#Beschreibung der vnode-Typen

TypVerhalten
React.ReactElement (JSX)Wird mit createRoot von React gerendert, bietet volle React-Funktionalität und übernimmt automatisch den Anwendungskontext.
stringSetzt das innerHTML des Containers nach der Bereinigung mit DOMPurify; ein vorhandener React-Root wird zuerst unmounted.
Node (Element, Text usw.)Wird nach dem Leeren des Containers per appendChild hinzugefügt; ein vorhandener React-Root wird zuerst unmounted.
DocumentFragmentHängt Fragment-Kindknoten an den Container an; ein vorhandener React-Root wird zuerst unmounted.

#Beispiele

#Rendern von React-Elementen (JSX)

const { Button, Card } = ctx.libs.antd;

ctx.render(
  <Card title={ctx.t('Titel')}>
    <Button type="primary" onClick={() => ctx.message.success(ctx.t('Geklickt'))}>
      {ctx.t('Schaltfläche')}
    </Button>
  </Card>
);

#Rendern von HTML-Strings

ctx.render('<h1>Hallo Welt</h1>');

// Kombination mit ctx.t für die Internationalisierung
ctx.render('<div style="padding:16px">' + ctx.t('Inhalt') + '</div>');

// Bedingtes Rendering
ctx.render(hasData ? `<ul>${items.map(i => `<li>${i}</li>`).join('')}</ul>` : '<span style="color:#999">' + ctx.t('Keine Daten') + '</span>');

#Rendern von DOM-Knoten

const div = document.createElement('div');
div.textContent = 'Hallo Welt';
ctx.render(div);

// Zuerst einen leeren Container rendern, dann an eine Drittanbieter-Bibliothek (z. B. ECharts) zur Initialisierung übergeben
const container = document.createElement('div');
container.style.width = '100%';
container.style.height = '400px';
ctx.render(container);
const chart = echarts.init(container);
chart.setOption({ ... });

#Angeben eines benutzerdefinierten Containers

// In ein bestimmtes DOM-Element rendern
const customEl = document.getElementById('mein-container');
ctx.render(<div>Inhalt</div>, customEl);

#Mehrfache Aufrufe ersetzen den Inhalt

// Der zweite Aufruf ersetzt den vorhandenen Inhalt im Container
ctx.render(<div>Erster Aufruf</div>);
ctx.render(<div>Zweiter Aufruf</div>);  // Es wird nur „Zweiter Aufruf“ angezeigt

#Hinweise

  • Mehrfache Aufrufe ersetzen den Inhalt: Jeder Aufruf von ctx.render() ersetzt den vorhandenen Inhalt im Container, anstatt ihn zu ergänzen.
  • Sicherheit von HTML-Strings: Übergebener HTML-Code wird mit DOMPurify bereinigt, um XSS-Risiken zu minimieren. Dennoch wird empfohlen, das Verketten von nicht vertrauenswürdigen Benutzereingaben zu vermeiden.
  • ctx.element nicht direkt manipulieren: ctx.element.innerHTML ist veraltet; stattdessen sollte einheitlich ctx.render() verwendet werden.
  • Container übergeben, wenn kein Standard existiert: In Szenarien, in denen ctx.element den Wert undefined hat (z. B. in Modulen, die über ctx.importAsync geladen wurden), muss explizit ein container angegeben werden.

#Verwandte Themen

  • ctx.element – Standard-Rendering-Container, der verwendet wird, wenn kein Container an ctx.render() übergeben wird.
  • ctx.libs – Integrierte Bibliotheken wie React und Ant Design, die für das JSX-Rendering verwendet werden.
  • ctx.importAsync() – Wird in Verbindung mit ctx.render() verwendet, nachdem externe React- oder Komponentenbibliotheken bei Bedarf geladen wurden.