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

React18引入Web Component触发shadowRoot只读错误求助

错误原因与解决方案:Cannot set property shadowRoot of # which has only a getter

错误根源

  • 原生HTMLElement本身自带shadowRoot属性,该属性是只读状态(仅包含getter,没有setter),用于返回元素关联的shadow DOM根节点。
  • 你在自定义组件类里显式声明了shadowRoot实例字段,随后在构造函数中尝试this.shadowRoot = this.attachShadow(...),本质是强行给只读属性赋值,直接触发了TypeError。

修复方案

直接删除类里的shadowRoot声明即可。attachShadow()方法执行后,会自动将创建的shadow DOM根节点绑定到元素的原生shadowRoot属性上,后续直接通过this.shadowRoot访问操作即可,完全无需手动赋值。

修正后的代码示例:

class ExampleComponent extends HTMLElement {
    constructor() {
        super()
        this.attachShadow({mode: 'open'})
        // 直接通过this.shadowRoot操作shadow DOM
        this.shadowRoot.innerHTML = '<p>这是Web Component内容</p>'
    }
    // 其他组件逻辑...
}

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:39:55