【问题标题】:How to add <script> tag using ReactJS?如何使用 ReactJS 添加 <script> 标签?
【发布时间】:2015-07-07 18:48:13
【问题描述】:

我需要声明一个 javascript 函数,如下所述:

render: function() {
  return (
          <div>
            <SomeReactClass somefunction="myFunction">
            <script>
              function myFunction(index, row) {
                return index;                       <<<< error in this line 
              }
            </script>
          </div>
          );
}

但是,它没有编译:“Parse Error: Line 113: Unexpected token return”

如何使用 ReactJS 添加标签?


更新

我正在尝试使用bootstrap-table detail view。该函数作为参数传递给网格,用于呈现行的详细信息。另外,请参阅example's source code 以获得更好的理解。

当我按照你说的方式尝试时,它可以编译,但根本不起作用:

这就是它的样子(在上面的例子中):

这就是我通过 &lt;SomeReactClass somefunction={myFunction}&gt; 得到的结果

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

我知道这是旧的,但我最近偶然发现了这个,这是我找到的最佳解决方案(我将它用于浏览器 polyfill,但它适用于任何代码):

render: function() {
  return (
     <div>
        <SomeReactClass somefunction="myFunction">
        <script
          dangerouslySetInnerHTML={{ __html:
            `function myFunction(index, row) {return index;}`
          }}
        />
     </div>
  );
}

【讨论】:

    【解决方案2】:

    在 JSX 内部,{...} 表示 JavaScript 表达式。 return index; 本身不是一个有效的表达式。

    您必须显式创建一个字符串,以便 JSX 不会解释 {...}。模板文字可能是最简单的解决方案:

    <script>{`
        function myFunction(index, row) {
            return index;
        }
    `}</script>
    

    但是,我很难想出为什么要动态创建 &lt;script&gt; 的原因。


    您可能应该做的是将函数直接传递给组件:

    function myFunction(index, row) {
        return index;
    }
    
    var Component = React.createElement({
      render: function() {
        return (
          <div>
            <SomeReactClass somefunction={myFunction} />
          </div>
        );
      }
    });
    

    但是如果不解释你在这里真正想要达到的目标,就很难说清楚。

    【讨论】:

    • 修复 SomeReactClass 期望一个函数,而不是一个字符串。
    • 看起来底层插件需要一个字符串属性,该属性对应于全局范围 github.com/wenzhixin/bootstrap-table/blob/master/src/… 上的函数。因此,如果 OP 想要使用 html 属性来初始化引导组件,他需要将其附加到 window.xml 中。否则他可以手动初始化表。
    【解决方案3】:

    我认为你只是在寻找你的 JS 的插值

    function myFunction(index, row) {
      return index;    
    }
    render: function() {
      return (
        <div>
          <SomeReactClass somefunction={myFunction}>
        </div>
      );
    }
    

    在 jsx 中插入 javascript 使用花括号 {}
    https://facebook.github.io/react/docs/jsx-in-depth.html#javascript-expressions

    根据您的编辑:
    同样,您需要使用大括号来插入您的函数。所以在SomeReactClass 内部,你需要在渲染函数中做这样的事情:

    <div>{this.props.myFunction(index, row)}</div>
    

    最值得注意的是,您不仅需要插入函数,还需要执行它。

    【讨论】:

    • 这没有多大意义。这将尝试将函数呈现为 &lt;div&gt; 的子函数。
    • 已更新。看到您的示例代码SomeReactClass 对我们很有帮助,因为它看起来不像您正确执行它。我还建议从我发布的链接中阅读文档以了解如何正确使用 jsx
    【解决方案4】:

    你应该试试这个:

    function myFunction(index, row) {
      return index;    
    }
    
    render: function() {
     return (
          <div>
            <script
                dangerouslySetInnerHTML={{ 
                  __html:myFunction() 
            
                }}
            />
          </div>
          );
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 2018-10-04
      • 2020-03-09
      • 2022-11-19
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多