<use> 标签上的 xlink:href 属性在 tsx 文件中使用时会引发打字稿错误

Posted

技术标签:

【中文标题】<use> 标签上的 xlink:href 属性在 tsx 文件中使用时会引发打字稿错误【英文标题】:xlink:href attribute on <use> tag throws typescript error when used in tsx file 【发布时间】:2018-09-28 07:22:30 【问题描述】:

我有简单的代码,其中包含带有&lt;use&gt; 标记的 svg 图标到使用 stencjiljs(tsx 语法)创建的 Web 组件中。但是,当我将xlink:href 属性添加到&lt;use&gt; 标记时,我收到错误Identifier expected

Example code: 
import  Component, Prop  from '@stencil/core';

@Component(
   tag: 'example-component',
   styleUrl: 'example-component.scss',
)

 export class ExampleComponent 
     render() 
        return (
            <svg>
                <use href="#iconid" xlink:href="#iconid"/>
            </svg>
       );
    

我厌倦了搜索 tsx/jsx 特定的解决方案,但我得到的只是 React 中的 xLinkHref,在这种情况下不起作用。

我有具体的方法吗?

【问题讨论】:

【参考方案1】:

这个对我来说很好用。我的组件扩展是.tsx

<use href="#iconid" xlinkHref="#iconid"/></use>

可能是因为你错过了结束标签。

【讨论】:

标签是自封闭的。但我注意到我使用的是xLinkHref 而不是xlinkHref。后者实际上是渲染到href 而不是xlink:href。但感谢您指出! 为我工作。这似乎应该是公认的答案@niemaszoka【参考方案2】:

看起来 Typescript 不支持命名空间属性:https://github.com/Microsoft/TypeScript/issues/7411

我建议跳过 JSX 并使用原始 JSX 组件工厂。 在 React 中,人们会像这样使用React.createElement

<use>
    React.createElement('use', href:"#iconid", "xlink:href": "#iconid")
</use>

不知道 stenciljs 工厂是如何命名的,但如果它与 JSX 兼容,它的 createElement 必须具有与上面显示的非常相似的 API。

(编辑:s/createComponent/createElement/g)

【讨论】:

以上是关于<use> 标签上的 xlink:href 属性在 tsx 文件中使用时会引发打字稿错误的主要内容,如果未能解决你的问题,请参考以下文章

Android 在 Manifest 中添加 <uses-feature>

svg组件封装

: tbody 标签上的空选择器

<a> 标签上的 preventDefault()

为啥 React.js 删除 <img /> 上的 srcset 标签?

div上的标签索引