Framework‑Adapter

Verwenden Sie Sixtyfold Charts Linien‑ und Kursdiagramme in React, Vue, Angular, Svelte und SolidJS.

Sixtyfolds Framework‑Pakete sind schlanke Lifecycle‑Adapter um dieselben LineChart und StockChart Engines. Sie duplizieren keine Render‑Logik, verändern keine Datenformate, fügen keine Laufzeit‑Telemetry hinzu und ziehen nicht jedes Diagramm in Ihre Anwendung.

Installieren Sie einen Adapter plus die Engine, die Sie verwenden. Importieren Sie nur dessen /line oder /stock Einstiegspunkt:

pnpm add @sixtyfold/react@next @sixtyfold/line@next
import { SixtyfoldLineChart } from "@sixtyfold/react/line";

Ersetze react durch vue, angular, svelte oder solid. Für ein Aktienchart installiere @sixtyfold/stock und importiere /stock. Chart‑Engines sind optionale Peer‑Dependencies des Adapters; das Installieren eines Liniencharts installiert daher kein Stock.

Geteilter Adaptervertrag

Alle Adapter erstellen das Chart nach dem Mounten der Komponente, warten auf initialize(), wenden reaktive Inputs an und rufen destroy() beim Unmount auf. Dies beendet auch einen Chart‑Worker und gibt Observer, Listener und große Buffer‑Referenzen frei. Während SSR gibt die Komponente nur ihren Canvas‑Host aus; verwende @sixtyfold/ssr, wenn der Server Chart‑Pixel rendern muss.

Prop/InputLinien‑TypStock‑TypVerhalten
optionsLineChartOptionsStockChartOptionsSchnappschuss zur Erstellungszeit. Um den Adapter zu ersetzen, erneut mounten; für Live-Visuelle Änderungen appearance verwenden.
dataTimeSeriesData | MultiSeriesDataOHLCVDataEinmal übertragbare Bulk-Daten, reaktiv nach Objektidentität. Immer frische Puffer mit einem neuen Objekt zuweisen.
dataUpdateOptionsLineDataUpdateOptionsSteuert animierten Austausch von Liniendaten, einschließlich preservePreviousFrame.
appearanceDeepPartial<LineAppearanceOptions>DeepPartial<StockAppearanceOptions>Tiefer visueller Patch angewendet, ohne das Diagramm neu zu erzeugen oder Daten zu ersetzen.
viewportPartial<Viewport>Partial<Viewport>Reaktive X-Bereich. Geben Sie xMin, xMax oder beide in den X-Einheiten des Diagramms an.
viewportAnimatedbooleanbooleanÜberschreibt die Animation für das entsprechende Viewport-Update. Unbestimmt lassen, um die Diagrammoptionen zu erben.
statsIntervalMsnumbernumberMinimales Telemetrie-Callback-Intervall in Millisekunden; Telemetrie bleibt ohne Listener deaktiviert.
readiness-Callback/EventLineChartStockChartWird einmal ausgelöst, nachdem initialize() aufgelöst wurde und das imperative Diagramm zugänglich macht.
Fehler-Callback/EventunknownunknownMeldet Konstruktionsfehler, Renderer-Initialisierungs-/Laufzeitfehler und Fehler bei der Overlay-Auflösung oder -Übermittlung.
Statistik-Callback/EventLineChartStatsStockChartStatsMeldet Renderer- und Daten-Telemetrie bei statsIntervalMs.
Reihen-Sichtbarkeit-Callback/EventSeriesVisibilityChangeEventMeldet Sichtbarkeitsänderungen aus der Initialisierung, API-Aufrufen und der interaktiven Legende.

Jeder Adapter meldet Bereitschaft, Konstruktions-, Renderer- und Overlay-Fehler sowie Render-Statistiken. Linien-Adapter melden zusätzlich SeriesVisibilityChangeEvent. Jedes Framework stellt die zugrunde liegende LineChart oder StockChart-Instanz über seine konventionelle Ref- oder Komponenten-API zur Verfügung, sodass seltene imperative Operationen weiterhin möglich bleiben.

Mit Chart-Fehlern umgehen

Adapter-Fehler-Hooks akzeptieren unknown, da JavaScript Konstruktionsfehler nicht verlangen, eine bestimmte Klasse zu verwenden. Vom Sixtyfold-Renderer emittierte Fehler sind Instanzen von ChartRendererError. Fehler bei der Overlay-Auflösung oder Renderer-Übermittlung sind Instanzen von ChartOverlayError. Engen Sie den Wert ein, bevor Sie strukturierte Felder lesen:

import {
  ChartOverlayError,
  ChartRendererError,
} from "@sixtyfold/line";

export function reportChartError(error: unknown) {
  if (error instanceof ChartRendererError) {
    console.error(error.phase, error.message);
    return;
  }
  if (error instanceof ChartOverlayError) {
    console.error("Overlay sources failed:", error.sources);
    return;
  }
  console.error(error);
}

Verwenden Sie denselben Import aus @sixtyfold/stock in einer reinen Stock-Anwendung. error.phase ist entweder "initialization" oder "runtime". Ein Renderer-Fehler zerstört die jeweilige Chart-Instanz; remounten Sie den Adapter, wenn die Anwendung eine Wiederherstellung wählt. Ein Overlay-Fehler ist nicht fatal: Erfolgreiche Elemente bleiben installiert; schlagen alle angeforderten Elemente fehl, bleibt das zuvor gerenderte Overlay erhalten.

Bulk-typisierte Arrays werden an den Worker übertragen. Behandeln Sie jedes Datenobjekt als Einmalobjekt: verändern Sie es nicht in-place und weisen Sie für jedes Update ein neues Objekt mit neuen Buffern zu. Das bewahrt den Zero-Copy-Pfad für Datensätze mit mehreren Millionen Punkten.

React

import { useMemo, useRef } from "react";
import {
  SixtyfoldLineChart,
  type LineChartHandle,
} from "@sixtyfold/react/line";

export function Signals() {
  const chartRef = useRef<LineChartHandle>(null);
  const data = useMemo(() => ({
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  }), []);

  return (
    <SixtyfoldLineChart
      ref={chartRef}
      data={data}
      aria-label="Signal history"
      onError={console.error}
    />
  );
}

Die Komponente akzeptiert normale Canvas-Attribute. Ihr Ref gibt ref.current?.chart frei. Die anfängliche Konstruktion wird mikrotask-verzögert durchgeführt, sodass die Entwicklungslebenszyklusprüfung von React Strict Mode die Anfangsdaten nicht zweimal übertragen kann.

Nur React‑SurfaceTypBeschreibung
refRef<LineChartHandle | StockChartHandle>Weitergeleiteter Handle, dessen chart Feld die gemountete imperative Instanz oder null enthält.
native Canvas‑AttributeCanvasHTMLAttributes<HTMLCanvasElement>, die an das Canvas übergeben werden, ausgenommen children. Verwenden Sie sie für aria-label, Klassennamen, Inline‑Styles, Tests und Pointer‑Metadaten.
onReady(chart) => voidWird einmal nach erfolgreicher Initialisierung aufgerufen.
onError(error: unknown) => voidWird bei Konstruktion, Renderer‑Initialisierung/-laufzeit oder bei Fehlern der Overlay-Auflösung/-Übermittlung aufgerufen.
onStats(stats) => voidAktiviert und empfängt Renderer‑Telemetrie.
onSeriesVisibilityChange(event) => voidSichtbarkeits-Callback nur für Linienserien.

Vue

<script setup lang="ts">
import { shallowRef } from "vue";
import { SixtyfoldLineChart } from "@sixtyfold/vue/line";

const data = shallowRef({
  x: new Float64Array([0, 1, 2, 3]),
  y: new Float64Array([3, 7, 4, 9]),
  length: 4,
});
</script>

<template>
  <SixtyfoldLineChart
    :data="data"
    aria-label="Signal history"
    @error="console.error"
  />
</template>

Verwenden Sie shallowRef oder markRaw für große Datenmengen statt Vue‑Deep‑Proxies. Die Komponente emittiert ready, error und stats; Liniendiagramme emittieren zusätzlich seriesVisibilityChange. Eine Template‑Ref gibt ihre flache chart‑Ref frei.

Vue‑SurfaceTypBeschreibung
gemeinsame PropsSiehe das Framework-Prop-IndexVue-Props verwenden dieselben Namen und Typen wie der gemeinsame Vertrag.
ready EreignisLineChart | StockChartGibt das initialisierte imperative Chart aus.
error EreignisunknownGibt Konstruktion, Renderer-Initialisierung/-Laufzeit oder Fehler bei der Overlay-Auflösung/-Übermittlung aus.
stats EreignisLineChartStats | StockChartStatsAktiviert und gibt Telemetrie aus.
seriesVisibilityChange EreignisSeriesVisibilityChangeEventNur Linien‑Sichtbarkeitsereignis.
vererbte AttributeNative Canvas‑AttributeNicht erkannte Attribute wie aria-label, class und style werden an das Canvas weitergereicht.
Template‑Ref chartShallowRef<LineChart | StockChart | null>Macht das gemountete imperative Chart zugänglich, ohne es tief zu proxyen.

Angular

Das Angular‑20–22‑Paket verwendet Standalone‑Komponenten und sekundäre Einstiegspunkte im Angular Package Format.

import { Component } from "@angular/core";
import { SixtyfoldLineChartComponent } from "@sixtyfold/angular/line";

@Component({
  standalone: true,
  imports: [SixtyfoldLineChartComponent],
  template: `
    <sixtyfold-line-chart
      [data]="data"
      ariaLabel="Signal history"
      (chartError)="reportError($event)"
    />
  `,
})
export class Signals {
  data = {
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  };

  reportError(error: unknown) {
    console.error(error);
  }
}

Eingaben folgen der gemeinsamen Tabelle plus fokussierten Zugänglichkeitsfeldern und canvasAttributes. Ausgaben sind chartReady, chartError und stats; die Linienkomponente emittiert außerdem seriesVisibilityChange. Eine Komponentenreferenz gibt ihr öffentliches chart frei.

Der Angular‑Application‑Builder transformiert paket‑eigene Vite‑Worker‑URLs nicht. Fügen Sie die vom Application verwendeten Engines dem Array assets der Build‑Target‑Konfiguration in angular.json hinzu:

[
  { "glob": "**/*", "input": "node_modules/@sixtyfold/line/dist/assets", "output": "assets" },
  { "glob": "**/*", "input": "node_modules/@sixtyfold/stock/dist/assets", "output": "assets" }
]

Der Chart‑Aufbau ist durch isPlatformBrowser geschützt, sodass Angular‑SSR Browser‑Globals nicht anfasst.

Angular-EingabeTypBeschreibung
optionsLineChartOptions | StockChartOptionsSchnappschuss zur Erstellungszeit.
dataLineData | OHLCVDataEinmalig übertragbarer reaktiver Datensatz.
dataUpdateOptionsLineDataUpdateOptionsNur Linienersatz-Animationsoptionen.
appearanceDeepPartial<LineAppearanceOptions | StockAppearanceOptions>Reaktive visuelle Patch.
viewportPartial<Viewport>Reaktiver X‑Domänen‑Patch.
viewportAnimatedboolean | undefinedÜberschreibung der Animation für die Viewport‑Eingabe.
statsIntervalMsnumber | undefinedMinimales Telemetrie‑Intervall, wenn stats Abonnenten hat.
canvasClassstringAuf das innere Canvas angewandte Klasse.
ariaLabelstringZugänglicher Name des Canvas.
ariaDescribedBystringIDs benachbarter Text‑ oder Tabellenalternativen, die das Diagramm beschreiben.
canvasRolestringExplizite Canvas‑Rolle; normalerweise das Diagramm wählen lassen application oder img.
canvasTabIndexnumberExplizite Tab-Reihenfolge; nur-Ansicht-Diagramme werden standardmäßig ausgelassen.
canvasAttributesRecord<string, string | number | boolean | null | undefined>Zusätzliche Canvas-Attribute wie Test-Hooks und Metadaten. Klasse, Stil, Größe, Rolle, Tab-Reihenfolge und die fokussierten Barrierefreiheits-Eingaben werden weiterhin separat verwaltet.
Angular-AusgabeNutzlastBeschreibung
chartReadyLineChart | StockChartGibt das initialisierte imperative Diagramm aus.
chartErrorunknownSendet Fehler beim Erstellen, bei der Initialisierung/Ausführung des Renderers oder bei der Overlay-Auflösung/-Übermittlung.
statsLineChartStats | StockChartStatsAktiviert und sendet Telemetriedaten des Renderers.
seriesVisibilityChangeSeriesVisibilityChangeEventNur Linien-Sichtbarkeitsausgabe.
public chartLineChart | StockChart | nullImperative Instanz, die über eine Komponentenreferenz zugänglich ist.

Svelte

<script lang="ts">
  import LineChart from "@sixtyfold/svelte/line";

  const data = {
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  };
</script>

<LineChart
  {data}
  ariaLabel="Signal history"
  onError={console.error}
/>

chart ist für imperativen Zugriff bindbar. Weitere Svelte-Props sind onReady, onError, onStats, onSeriesVisibilityChange für Liniendiagramme, canvasClass, canvasStyle und ariaLabel.

Svelte-Prop/BindingTypBeschreibung
gemeinsame PropsSiehe das Framework-Prop-IndexVerwendet die gemeinsamen options, data, appearance, Viewport-, Telemetrie- und Callback-Props.
onReady(chart) => voidEmpfängt das initialisierte imperative Diagramm.
onError(error: unknown) => voidMeldet Fehler beim Erstellen, bei der Renderer‑Initialisierung/-laufzeit oder bei der Overlay-Auflösung/-Übermittlung.
onStats(stats) => voidAktiviert und empfängt Telemetrie.
onSeriesVisibilityChange(event) => voidSichtbarkeits‑Callback nur für Linien.
canvasClassstringAuf das Canvas angewendete Klasse.
canvasStylestringAuf das Canvas angewendete CSS-Deklarationstext.
ariaLabelstringZugänglicher Canvas-Name.
bindbar chartLineChart | StockChart | nullEingehängtes imperatives Chart; wird bei Bereinigung auf null zurückgesetzt.

SolidJS

import { SixtyfoldLineChart } from "@sixtyfold/solid/line";

const data = {
  x: new Float64Array([0, 1, 2, 3]),
  y: new Float64Array([3, 7, 4, 9]),
  length: 4,
};

export function Signals() {
  return (
    <SixtyfoldLineChart
      data={data}
      canvasProps={{ "aria-label": "Signal history" }}
      chartRef={(chart) => console.log(chart)}
      onError={console.error}
    />
  );
}

chartRef empfängt das montierte Diagramm und null später während der Aufräumphase. canvasProps übergibt native Canvas-Attribute. Alle anderen Props folgen dem gemeinsamen Vertrag.

Nur SolidJS-OberflächeTypBeschreibung
chartRef(chart | null) => voidEmpfängt das montierte imperative Diagramm und null später während der Aufräumphase.
canvasPropsJSX.CanvasHTMLAttributes<HTMLCanvasElement>Native-Canvas-Attribute, Barrierefreiheitsmetadaten, class, style und Test-Hooks.
onReady(chart) => voidWird nach erfolgreicher Initialisierung aufgerufen.
onError(error: unknown) => voidWird beim Erstellen, bei der Renderer-Initialisierung/-Laufzeit oder bei Fehlern der Overlay-Auflösung/-Übermittlung aufgerufen.
onStats(stats) => voidAktiviert Telemetrie und empfängt diese.
onSeriesVisibilityChange(event) => voidSichtbarkeits-Callback nur für Linien.

Vollständige Beispiele

Das öffentliche Repository enthält für jedes unterstützte Framework eine minimale, responsive Anwendung. Jede Anwendung zeigt die Pakete, die Datenstruktur, die Chart-Konfiguration und die notwendigen Aufräumarbeiten, um sowohl ein Linien- als auch ein Aktienchart zu reproduzieren.