开发者问题收集

React18 与 webcomponents 一起导致 Uncaught TypeError:无法设置仅具有 gette 的 #<Element> 的属性 shadowRoot

2023-04-27
503

我有一个用纯 js(不是 ts)编写的 react18 应用程序。我从另一个项目导入了一个 webcomponent,它导致以下错误:

Uncaught TypeError:无法设置只有 getter 的 #<Element> 的属性 shadowRoot

class ExampleComponent extends HTMLElement {

    shadowRoot
    
    constructor() {
        super()
        this.shadowRoot = this.attachShadow({mode: 'open'})
    }
    ...
}


window.customElements.define('example-component', ExampleComponent)


有人知道为什么会发生这种情况吗?抱歉,由于公司法律问题,我无法为您提供完整的代码示例。

3个回答

使用 shadowRoot 可以定义一个属性

但是 attachShadow() 既会 创建 ,也会 返回 this.shadowRoot

这是您的 (React) Build 步骤发出的抱怨,在本机代码中执行此操作是可以的(但毫无意义)

customElements.define('example-component', class extends HTMLElement {
    shadowRoot // unrequired
    constructor() {
        super()
          .attachShadow({mode: 'open'})
          .innerHTML = `Hello Web Component`;
    }
})
<example-component></example-component>
Danny '365CSI' Engelman
2023-04-27

问题是 shadowRoot 应该命名为 #shadowRoot 。只需在 shadowRoot 中添加 # 。不要问我为什么,但这解决了我的问题。

Frank Roth
2023-05-03

不要执行 this.shadowRoot ,而是将其声明为 const shadowRoot

Saqib Ganaie
2024-04-01