React / JSX:渲染的 <script> 标记将等号和引号添加到异步属性

Posted

技术标签:

【中文标题】React / JSX:渲染的 <script> 标记将等号和引号添加到异步属性【英文标题】:React / JSX: Rendered <script> Tag Adds Equals Sign and Quotes to async Attribute 【发布时间】:2021-05-18 01:21:00 【问题描述】:

我使用 Next.js / React 制作了一个简单的 Web 应用程序。其中一个功能组件(Next.js“页面”)返回一些包含类似

标签的 JSX
<script async src="https://example.com/file.js"></script>

但是,当我查看呈现页面的页面源时,我看到 async 被呈现为 async=""。有没有办法强制逐字呈现属性/标签而不是添加等号和引号?是针对这个特定的标签,还是一般来说?

编辑:这是一个显示不良行为的最小 JSFiddle:https://jsfiddle.net/1vbnms3j/。这显然只是一个 React / JSX 问题,与 Next.js 无关。我尝试过诸如https://github.com/facebook/react/issues/9230#issuecomment-388118729 之类的解决方案,但async=''async=trueasync=undefined 似乎都不起作用。无论我使用&lt;script&gt;&lt;/script&gt; 还是&lt;script /&gt;,也没有什么区别。

【问题讨论】:

【参考方案1】:

这是一个有效的丑陋解决方案:

<script dangerouslySetInnerhtml= __html: `</script><script async src="https://example.com/file.js"></script><script>`,/>

这会正确呈现我的标签(async 属性显示正确且位置正确),但会在我的标签前后生成不必要的&lt;script&gt;&lt;/script&gt;(尽管这些大多是无害的)。

如果可能的话,我仍然想要一个不会生成不必要标签的更清洁的解决方案。

【讨论】:

你看到了吗? github.com/facebook/react/issues/11624 是的。在我的用例中,我有一个外部脚本,它正在检查页面源代码中是否存在(精确字符串匹配)类似&lt;script src="magic.js" async&gt;&lt;/script&gt; 的东西,所以我需要async 而不是async=''。但我认为结果是没有一个干净的官方解决方案,在没有人做出反应 PR 的情况下,可能需要像上面这样的一些黑客攻击。 我昨天也遇到了同样的问题。关于该问题链接的讨论说 async="" 也是一种有效的编写方式,因此 asyncasync='' 并没有真正的区别!?虽然我还没有测试过,但如果是这样,那么我们应该对任何一个都很好。 有效的 HTML 与算法可能期望在源代码中找到的不同。如果一个算法确实试图在你的代码中匹配“

以上是关于React / JSX:渲染的 <script> 标记将等号和引号添加到异步属性的主要内容,如果未能解决你的问题,请参考以下文章

React / JSX:渲染的 <script> 标记将等号和引号添加到异步属性

标签错误:渲染时出现 React JSX 样式标签错误

[react] 写个例子说明什么是JSX的内联条件渲染

React Native:你能根据字符串的存在有条件地渲染 JSX 吗?

react简述-react基础-jsx语法-jsx表达式-jsx动态属性-jsx列表渲染

ReactReact全家桶React 概述+虚拟DOM的创建与渲染+JSX