feat: 优化 useTradingView 函数,深拷贝初始化选项和用户选项以避免引用问题

This commit is contained in:
2025-12-27 21:05:20 +07:00
parent c6c3676a35
commit af22b1c75e

View File

@@ -2,7 +2,7 @@ import type { Awaitable } from "@vueuse/core";
import type { ChartOptions, DeepPartial, IChartApi, ISeriesApi, LayoutOptions, OhlcData, SeriesDataItemTypeMap, SeriesType } from "lightweight-charts"; import type { ChartOptions, DeepPartial, IChartApi, ISeriesApi, LayoutOptions, OhlcData, SeriesDataItemTypeMap, SeriesType } from "lightweight-charts";
import type { ThemeMode } from "./useTheme"; import type { ThemeMode } from "./useTheme";
import { AreaSeries, BarSeries, BaselineSeries, CandlestickSeries, ColorType, createChart, HistogramSeries, LineSeries } from "lightweight-charts"; import { AreaSeries, BarSeries, BaselineSeries, CandlestickSeries, ColorType, createChart, HistogramSeries, LineSeries } from "lightweight-charts";
import { mergeWith } from "lodash-es"; import { cloneDeep, mergeWith } from "lodash-es";
export type Series = "Area" | "Bar" | "Baseline" | "Candlestick" | "Histogram" | "Line"; export type Series = "Area" | "Bar" | "Baseline" | "Candlestick" | "Histogram" | "Line";
@@ -63,7 +63,7 @@ function getChartSeriesDefinition(type: Series) {
const { isDark } = useTheme(); const { isDark } = useTheme();
export function useTradingView(target: MaybeRefOrGetter<HTMLElement | null>, options?: TradingViewOptions) { export function useTradingView(target: MaybeRefOrGetter<HTMLElement | null>, options?: TradingViewOptions) {
const opts: Required<TradingViewOptions> = mergeWith(initializeOptions, options); const opts: Required<TradingViewOptions> = mergeWith(cloneDeep(initializeOptions), cloneDeep(options));
const chart = ref<IChartApi | null>(null); const chart = ref<IChartApi | null>(null);
const chartSeriesDefinition = getChartSeriesDefinition(opts.type); const chartSeriesDefinition = getChartSeriesDefinition(opts.type);
const chartEl = ref<HTMLElement | null>(null); const chartEl = ref<HTMLElement | null>(null);