编写Web组件时如何处理“一旦不再连接元素就可以调用connectedCallback”

吉姆·c

从我的问题中粘贴的该声明是从https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#Using_the_lifecycle_callbacks复制的

作为Webcomponent的无经验​​开发人员,我试图了解到目前为止推荐的所有经验法则和最佳实践。

继续阅读,上面写着“ ...使用Node.isConnected确保”。很明显,这意味着什么:检查它是否仍处于连接状态,但至少对于我来说不清楚,我应该怎么做才能解决该问题,或者在某些情况下应该期望什么。

我的情况是我正在创建一个Web组件来侦听SSE(服务器发送事件)。这对于alife仪表板和其他几种情况将很有用。从Kafka Stream消费后,SSE事件基本上将由NodeJ或Spring Webflux响应。

到目前为止,我所做的所有简单示例都没有遇到任何问题,因为在connectedcallback期间不再连接元素。

此外,我没有阅读最佳做法”中有关“元素不再连接”的任何建议

我读了一些精彩的讨论:

可以将自定义元素连接的回叫比光盘多一次

从那里得知,我始终可以信任这个生命周期构造函数-> connectedCallback-> connectededCallback。

当所有子自定义元素都已连接时,如何具有“ connectedCallback”

基本上我了解到没有一种特定的方法“在所有孩子都升级后被称为”

这两个问题都接近我的问题,但是并不能回答我:应该知道哪个挑战或风险,或者如何解决“一旦元素不再连接,就可以调用connectedCallback”的可能性?在上述情况下,我缺少任何治疗方法吗?我是否应该创建一些观察者,当元素不再可用时触发该观察者以重新创建事件源对象,并再次向该事件源对象添加侦听器?

我粘贴代码为波纹管和ilustration完整WebComponent的例子可以从克隆https://github.com/jimisdrpc/simplest-webcomponet并从其后端https://github.com/jimisdrpc/simplest-kafkaconsumer

const template = document.createElement('template');
template.innerHTML = `<input id="inputKafka"/> `;

class InputKafka extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {

    this.attachShadow({mode: 'open'})
    this.shadowRoot.appendChild(template.content.cloneNode(true))

    const inputKafka = this.shadowRoot.getElementById('inputKafka');

    var source = new EventSource('http://localhost:5000/kafka_sse');

    source.addEventListener('sendMsgFromKafka', function(e) {
      console.log('fromKafka');
      inputKafka.value = e.data;
    }, false);

  }
  attributeChangedCallback(name, oldVal, newVal) {
    console.log('attributeChangedCallback');
  }

  disconnectedCallback() {
    console.log('disconnectedCallback');
  }

  adoptedCallback() {
    console.log('adoptedCallback');
  }
}

window.customElements.define("input-kafka", InputKafka);
超锐利

connectedCallback()断开自定义元素的连接后,唯一的情况是在您玩它时:在创建它之后迅速移动或删除它有时可能会导致这种情况。

在您描述的用例中,如果您使用持久的单页应用程序来承载Web组件,则永远不会发生这种情况。实际上,直到关闭页面,您的Custom Element才不会断开连接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

一旦安装了Ubuntu风格(例如lubuntu),就可以更改桌面环境吗?

一旦选择了<option>标记的值,就可以抓取页面的HTML内容

该线程一旦结束就可以运行,该怎么办?

WPF Datagrid,一旦创建就可以选择还是关注行?

反应登录,一旦授权就可以移动到新视图

我希望角色只要按住按钮就可以做某事,一旦放开按钮,就可以恢复正常

如何在xml的输出中分配到分支的链接,以便一旦我在html的输出中单击它就可以打开它

从/ etc / fstab挂载Windows共享失败,但是一旦系统启动,挂载-a就可以了

一旦安装了v4,就可以模仿PowerShell v3吗?

有没有一种方法可以运行带有Ruby绑定测试套件的Selenium Webdriver,一旦运行完成,就可以在irb中继续编写测试了吗?

一旦射线投射不再出现在对象上时,如何禁用组件?

一旦将私有远程存储库克隆到本地计算机,就可以防止对其进行未经授权的使用

总是Verilog RTL文件中的模块不起作用,但是一旦包含在测试台中就可以工作

无需在VBA中编写宏就可以确定元素在特定范围内是否唯一:是否有公式可以做到这一点?

一旦线程中断,如何中断RestTemplate调用?

一旦删除元素,数据框不再是数据框

一旦不再可点击,如何使下一个按钮消失?

无需服务器就可以编写Bot吗?

一旦该元素出现在页面上,有没有一种方法可以将事件处理程序附加到HTML元素。

一旦满足,如何继续循环 if 语句并且不再循环整个 if 和 else

一旦不再可见,如何在 ViewPager2 中重置 ViewHolder 的视图状态?

如何仅通过导入模块就可以调用 python 模块函数

每次发出一个zip 2时就可以观察到

我可以编写“只要可能”就可以像c ++模板函数一样工作的Julia方法吗?

一旦我将组件留在Angular中,就停止调用连续函数

一旦合并了提交,我如何跟踪它们来自何处?

让Jenkins无需永远运行就可以开始批处理?

一旦不再提供pdftk替代pdftk multistamp?

我有一个共同例程,一旦选定就可以播放。但是,如果我再次选择它,则不会发生任何事情。但是第一次确实有效