Для многих повторно отображает график TradingView в react

#javascript #reactjs #tradingview-api

Вопрос:

Хороший день. Я добавил диаграмму в приложение SPA react. Диаграмма отображается на странице с использованием пользовательского эффекта. На графике также отображается линия порядка. На странице также есть ввод, и в зависимости от этого ввода строка заказа должна измениться. Однако, когда линия порядка будет нарисована, вся диаграмма будет отображаться как цель. Кроме того, когда я изменяю положение строки, я переношу данные на тот же вход, и все отображается таким же образом.

Как я могу исправить эту проблему и не перерисовывать диаграмму, а только линию порядка?

 export const TVChartContainer = ({
                   symbol= 'Binance:BTC/USDT',
                   interval= '1D',
                   containerId = 'tv_chart_container',
                   libraryPath = '/charting_library/',
                   chartsStorageUrl = 'https://saveload.tradingview.com',
                   chartsStorageApiVersion = '1.1',
                   clientId = 'tradingview.com',
                   userId = 'public_user_id',
                   fullscreen = false,
                   autosize = true,
                   studiesOverrides = {},
                   buyLine,
                   setBuyLine,
                 }) => {
  useEffect(() => {
    const widgetOptions = {
      debug: false,
      symbol: symbol,
      datafeed: Datafeed,
      interval: interval,
      container_id: containerId,
      library_path: libraryPath,
      locale: getLanguageFromURL() || 'en',
      disabled_features: ['use_localstorage_for_settings'],
      enabled_features: ['study_templates'],
      charts_storage_url: chartsStorageUrl,
      charts_storage_api_version: chartsStorageApiVersion,
      client_id: clientId,
      user_id: userId,
      fullscreen: fullscreen,
      autosize: autosize,
      studies_overrides: studiesOverrides,
    };
    const tvWidget = new widget(widgetOptions);

    tvWidget.onChartReady(() => {
      const order = tvWidget.chart().createOrderLine()
        .setText("Buy Line")
        .onMove(function () {
          setBuyLine(order.getPrice().toFixed(2));
        })
        .setLineLength(30)
        .setLineStyle(2)
        .setPrice(buyLine)
        .setLineColor('blue')
        .setQuantity(buyLine);
    })
  }, [symbol, buyLine]);
  return (
    <div
      id={containerId}
      className={'TVChartContainer'}
    />
  );
};
 

Ответ №1:

Вы устанавливаете buyLine эффект использования и используете его как зависимость, поэтому он застрянет в бесконечном цикле. Удалите эту зависимость.

Комментарии:

1. да, но если я удалю эту зависимость, линии перестанут рисоваться при изменении данных

2. Почему вы передаете и состояние, и настройку этого состояния от родителя?