Adaptadores de frameworks

Utilice los gráficos de líneas y de acciones de Sixtyfold desde React, Vue, Angular, Svelte y SolidJS.

Los paquetes de framework de Sixtyfold son adaptadores ligeros del ciclo de vida alrededor de los mismos motores LineChart y StockChart. No duplican la lógica de renderizado, no reconfiguran datos, no añaden telemetría en tiempo de ejecución ni incorporan todos los gráficos en su aplicación.

Instale un adaptador más el motor que utilice. Importe únicamente su punto de entrada /line o /stock:

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

Reemplace react por vue, angular, svelte o solid. Para un gráfico de valores, instale @sixtyfold/stock e importe /stock. Los motores de gráfico son dependencias peer opcionales del adaptador, por lo que instalar un gráfico de líneas no instala stock.

Contrato compartido del adaptador

Todos los adaptadores crean el gráfico después de que el componente monta, esperan a initialize(), aplican entradas reactivas y llaman a destroy() al desmontar. Esto también termina un worker de gráfico y libera observadores, oyentes y referencias a buffers grandes. Durante SSR el componente emite solo su host canvas; use @sixtyfold/ssr cuando el servidor deba pintar píxeles del gráfico.

Prop/entradaTipo de líneaTipo stockComportamiento
optionsLineChartOptionsStockChartOptionsInstantánea en tiempo de construcción. Vuelva a montar el adaptador para reemplazarlo; use appearance para cambios visuales en vivo.
dataTimeSeriesData | MultiSeriesDataOHLCVDataDatos masivos transferibles de una sola vez, reactivos por identidad de objeto. Asigne siempre buffers nuevos con un objeto nuevo.
dataUpdateOptionsLineDataUpdateOptions—Ajustes reactivos para la sustitución animada de datos de línea, incluyendo preservePreviousFrame; cambiarlos por sí solos no retransferirá los datos instalados.
appearanceDeepPartial<LineAppearanceOptions>DeepPartial<StockAppearanceOptions>Parche visual profundo aplicado sin recrear el gráfico ni reemplazar los datos.
viewportPartial<Viewport>Partial<Viewport>Rango X reactivo. Proporcione xMin, xMax o ambos en las unidades X del gráfico.
viewportAnimatedbooleanbooleanAnula la animación para la actualización de la ventana gráfica correspondiente. Dejar indefinido para heredar las opciones del gráfico.
statsIntervalMsnumbernumberIntervalo mínimo de devolución de llamada de telemetría en milisegundos; la telemetría permanece deshabilitada sin un oyente.
callback/evento de disponibilidadLineChartStockChartSe dispara una vez por instancia de gráfico tras la inicialización y el primer lote de props exitoso de datos, apariencia y ventana gráfica; no espera a un fotograma pintado.
callback/evento de errorunknownunknownInforma de errores en la construcción y la instalación reactiva de propiedades, fallos en la inicialización/ejecución del renderizador y fallos en la resolución o entrega de overlays.
callback/evento de estadísticasLineChartStatsStockChartStatsInforma telemetría del renderizador y de datos en statsIntervalMs.
callback/evento de visibilidad de seriesSeriesVisibilityChangeEvent—Informa de cambios de visibilidad desde la inicialización, llamadas a la API y la leyenda interactiva.

Cada adaptador informa de su estado listo, errores de construcción e instalación de propiedades, errores del renderizador y de overlay, además de estadísticas de renderizado. Los adaptadores de líneas también informan SeriesVisibilityChangeEvent. Cada framework expone la instancia subyacente LineChart o StockChart a través de su API convencional de refs o componentes, de modo que las operaciones imperativas poco comunes siguen siendo accesibles.

Readiness significa que las props iniciales han sido aceptadas, no que su primer fotograma en canvas haya sido pintado. Los cambios imperativos realizados en el callback ready no son sobrescritos por un lote diferido de props iniciales.

Gestionar fallos del chart

Los hooks de error del adaptador aceptan unknown porque los errores de construcción JavaScript no están obligados a usar una clase concreta. Los fallos emitidos por el renderer de Sixtyfold son instancias de ChartRendererError. Los fallos de resolución de overlays o de entrega del renderer son instancias de ChartOverlayError. Reduzca el valor antes de leer campos estructurados:

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);
}

Use la misma importación desde @sixtyfold/stock en una aplicación que sólo use stock. error.phase es o bien "initialization" o bien "runtime". Un fallo del renderer destruye esa instancia de chart; vuelva a montar el adaptador si la aplicación decide recuperarla. Un fallo de overlay no es fatal: los ítems instalados con éxito permanecen; si cada ítem solicitado falla, permanece el overlay renderizado previamente.

Una instalación de prop reactiva rechazada informa un error y retiene la notificación inicial de listo. Proporcione props corregidos para reintentar sin volver a montar. Los datos ya instalados con éxito no se transfieren de nuevo cuando un prop posterior falla. Esta recuperación no se aplica a errores terminales del renderer.

Los arrays tipados en bloque se transfieren al worker. Trate cada objeto de datos como de un solo uso: no lo muten in situ y asigne un objeto nuevo con buffers nuevos para cada actualización. Esto conserva la ruta de zero-copy para conjuntos de datos de varios millones de puntos.

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}
    />
  );
}

El componente acepta atributos ordinarios de canvas. Su ref expone ref.current?.chart. La construcción inicial se aplaza a microtarea para que la comprobación del ciclo de vida en modo Strict de React en desarrollo no pueda transferir los datos iniciales dos veces.

React 19.2+ Activity puede ocultar y mostrar un gráfico sin recrear su renderer ni retransmitir datos. La asignación de props y las notificaciones de readiness/error esperan hasta la revelación; las estadísticas y los callbacks de visibilidad de series se desconectan mientras está oculto. El worker y los buffers retenidos se liberan cuando el componente se desmonta realmente, incluyendo un desmontado mientras está oculto.

React desconecta el ref reenviado mientras está oculto. Un handle capturado previamente también devuelve null desde .chart hasta la revelación. React 18 y las versiones anteriores de React 19 destruyen los gráficos al desmontar mediante limpieza pasiva, incluyendo gráficos ocultos por un límite Suspense re-suspendido.

Superficie solo para ReactTipoDescripción
refRef<LineChartHandle | StockChartHandle>Handle reenviado cuyo campo chart contiene la instancia imperativa montada o null.
atributos nativos del canvasCanvasHTMLAttributes<HTMLCanvasElement>Pasados al canvas, excluyendo children. Úselos para aria-label, nombres de clase, estilo en línea, pruebas y metadatos de puntero.
onReady(chart) => voidLlamado una vez tras la inicialización y el primer lote reactivo de propiedades exitoso.
onError(error: unknown) => voidLlamado para construcción, instalación de propiedades reactivas, inicialización/tiempo de ejecución del renderizador o fallo en la resolución/entrega de superposiciones.
onStats(stats) => voidHabilita y recibe telemetría del renderizador.
onSeriesVisibilityChange(event) => voidCallback de visibilidad solo para series de línea.

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>

Use shallowRef o markRaw para datos por lotes en lugar de proxies profundos de Vue. El componente emite ready, error y stats; los gráficos de líneas también emiten seriesVisibilityChange. Un ref de plantilla expone su ref superficial chart.

La recopilación de estadísticas sigue a los oyentes reactivos. Un único oyente @stats.once desactiva la recopilación tras su primer evento; un oyente ordinario @stats la mantiene activada. Un oyente consumido .once permanece consumido durante la vida del componente.

Superficie VueTipoDescripción
props compartidasVea el índice de props del frameworkLas props de Vue usan los mismos nombres y tipos que el contrato compartido.
ready eventoLineChart | StockChartEmite el gráfico tras la inicialización y el primer lote reactivo de props satisfactorio.
error eventounknownEmite fallos en la construcción, en la instalación reactiva de props, en la inicialización/ejecución del renderer, o en la resolución/entrega de overlays.
stats eventoLineChartStats | StockChartStatsHabilita y emite telemetría.
seriesVisibilityChange eventoSeriesVisibilityChangeEventEvento de visibilidad solo para la línea.
atributos heredadosAtributos nativos del canvasLos atributos no reconocidos como aria-label, class y style se reenvían al canvas.
referencia de plantilla chartShallowRef<LineChart | StockChart | null>Expone el chart imperativo montado sin aplicar un proxy profundo.

Angular

El paquete Angular 20–22 utiliza componentes independientes y puntos de entrada secundarios en el 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);
  }
}

Las entradas siguen la tabla compartida más campos de accesibilidad centrados y canvasAttributes. Las salidas son chartReady, chartError y stats; el componente de línea también emite seriesVisibilityChange. Una referencia de componente expone su chart pública.

La recopilación de estadísticas solo está habilitada mientras haya un suscriptor activo que pueda recibir la salida stats. Se detiene después de que el último suscriptor se dé de baja, incluyendo take(1), y cuando la salida completa, produce errores o se cierra.

El compilador de aplicaciones de Angular no transforma las URLs de worker de Vite pertenecientes a paquetes. Añada los motores usados por la aplicación a la matriz assets del objetivo de compilación en angular.json:

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

La construcción del gráfico está protegida con isPlatformBrowser, por lo que Angular SSR no modifica los globals del navegador.

Entrada de AngularTipoDescripción
optionsLineChartOptions | StockChartOptionsInstantánea en tiempo de construcción.
dataLineData | OHLCVDataConjunto de datos reactivo transferible de una sola vez.
dataUpdateOptionsLineDataUpdateOptionsOpciones de animación de reemplazo solo para línea.
appearanceDeepPartial<LineAppearanceOptions | StockAppearanceOptions>Parche visual reactivo.
viewportPartial<Viewport>Parche reactivo de dominio X.
viewportAnimatedboolean | undefinedAnulación de animación para la entrada del área de visualización.
statsIntervalMsnumber | undefinedIntervalo mínimo de telemetría cuando stats tiene suscriptores.
canvasClassstringClase aplicada al canvas interior.
ariaLabelstringNombre accesible del canvas.
ariaDescribedBystringIDs de alternativas de texto o tablas adyacentes que describen el gráfico.
canvasRolestringPapel explícito del canvas; normalmente deje que el gráfico elija application o img.
canvasTabIndexnumberOrden de tabulación explícito; los gráficos solo de visualización se omiten por defecto.
canvasAttributesRecord<string, string | number | boolean | null | undefined>Atributos adicionales del canvas, como hooks de prueba y metadatos. Clase, estilo, tamaño, rol, orden de tabulación y las entradas de accesibilidad enfocadas siguen gestionándose por separado.
Salida de AngularCarga útilDescripción
chartReadyLineChart | StockChartEmite el gráfico tras la inicialización y el primer lote reactivo de propiedades exitoso.
chartErrorunknownEmite errores durante la construcción, la asignación reactiva de propiedades, la inicialización/ejecución del renderizador, o la resolución/entrega de superposiciones.
statsLineChartStats | StockChartStatsHabilita y emite telemetría del renderizador.
seriesVisibilityChangeSeriesVisibilityChangeEventSalida de visibilidad solo de línea.
público chartLineChart | StockChart | nullInstancia imperativa expuesta en una referencia de componente.

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 es enlazable para acceso imperativo. Las props adicionales de Svelte son onReady, onError, onStats, onSeriesVisibilityChange para gráficos de líneas, canvasClass, canvasStyle, y ariaLabel.

Svelte prop/bindingTipoDescripción
props compartidosConsulte el índice de props del frameworkUsa los options, data, appearance compartidos, viewport, telemetría y props de callback.
onReady(chart) => voidRecibe el chart tras la inicialización y el primer lote reactivo de props exitoso.
onError(error: unknown) => voidInforma fallos en la construcción, instalación reactiva de props, inicialización/ejecución del renderer o resolución/entrega de overlays.
onStats(stats) => voidHabilita y recibe telemetría.
onSeriesVisibilityChange(event) => voidCallback de visibilidad solo de línea.
canvasClassstringClase aplicada al canvas.
canvasStylestringTexto de declaración CSS aplicado al canvas.
ariaLabelstringNombre accesible del canvas.
vinculable chartLineChart | StockChart | nullGráfico imperativo montado; se restablece a null al limpiar.

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 recibe el gráfico montado y más tarde null durante la limpieza. canvasProps transmite atributos nativos del canvas. Todas las demás props siguen el contrato compartido.

Superficie solo SolidJSTipoDescripción
chartRef(chart | null) => voidRecibe el chart imperativo montado y posteriormente null durante la limpieza.
canvasPropsJSX.CanvasHTMLAttributes<HTMLCanvasElement>Atributos nativos de canvas, metadatos de accesibilidad, class, style y hooks de test.
onReady(chart) => voidLlamado tras la inicialización y el primer lote reactivo de props exitoso.
onError(error: unknown) => voidSe invoca por fallos en la construcción, instalación de propiedades reactivas, inicialización/ejecución del renderizador o resolución/entrega de superposiciones.
onStats(stats) => voidHabilita y recibe telemetría.
onSeriesVisibilityChange(event) => voidCallback de visibilidad solo para líneas.

Ejemplos completos

El repositorio público incluye una aplicación mínima y responsiva para cada framework compatible. Cada aplicación muestra los paquetes, la forma de los datos, la configuración del gráfico y la limpieza necesaria para reproducir tanto un gráfico de líneas como uno bursátil.