You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中插入TradingView嵌入代码?为何出现语法错误?

问题原因及解决方法

原因

React的JSX语法中,{}是用来包裹JavaScript表达式的标识。你从TradingView复制的嵌入代码里通常包含配置对象(比如new TradingView.widget({ ... })),这些对象的大括号会被JSX误识别为表达式边界。哪怕括号数量匹配,JSX会尝试解析大括号内的内容为合法JS代码,而嵌入代码里的配置是带引号键名的JSON格式,不符合JS表达式语法,因此抛出语法错误。

解决方法

方法1:使用dangerouslySetInnerHTML渲染完整嵌入代码

把TradingView的整个嵌入代码作为字符串,通过dangerouslySetInnerHTML插入组件,React会直接渲染原始HTML,不会解析里面的大括号。这是最简便的方式,适合完整嵌入代码的场景。

示例代码:

import React from 'react';

const TestPage = () => {
  // 替换成你从TradingView复制的完整嵌入代码
  const tradingViewCode = `
    <div class="tradingview-widget-container">
      <div class="tradingview-widget-container__widget"></div>
      <script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script>
      <script type="text/javascript">
        new TradingView.widget({
          "width": 980,
          "height": 610,
          "symbol": "NASDAQ:AAPL",
          "interval": "D",
          "timezone": "Etc/UTC",
          "theme": "light",
          "style": "1",
          "locale": "en",
          "toolbar_bg": "#f1f3f6",
          "enable_publishing": false,
          "allow_symbol_change": true,
          "container_id": "tradingview_12345"
        });
      </script>
    </div>
  `;

  return (
    <div>
      <h1>Test Page</h1>
      {/* 用dangerouslySetInnerHTML渲染原始HTML */}
      <div dangerouslySetInnerHTML={{ __html: tradingViewCode }} />
    </div>
  );
};

export default TestPage;

方法2:手动转义大括号

如果不想用dangerouslySetInnerHTML,可以把嵌入代码里的每个{替换成{'{'},每个}替换成{'}'},让React把这些大括号当成普通字符串渲染。这种方式适合代码量较小的场景,需要手动修改所有大括号。

示例代码:

import React from 'react';

const TestPage = () => {
  return (
    <div>
      <h1>Test Page</h1>
      <div className="tradingview-widget-container">
        <div className="tradingview-widget-container__widget"></div>
        <script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script>
        <script type="text/javascript">
          new TradingView.widget({'{'}
            "width": 980,
            "height": 610,
            "symbol": "NASDAQ:AAPL",
            "interval": "D",
            "timezone": "Etc/UTC",
            "theme": "light",
            "style": "1",
            "locale": "en",
            "toolbar_bg": "#f1f3f6",
            "enable_publishing": false,
            "allow_symbol_change": true,
            "container_id": "tradingview_12345"
          {'}'});
        </script>
      </div>
    </div>
  );
};

export default TestPage;

额外注意

嵌入代码里的class属性要改成JSX支持的className,因为class是JavaScript的关键字,JSX中用className替代。

内容的提问来源于stack exchange,提问作者RichardGarcon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:40:36