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

2024-01-09

我的问题中粘贴的那句话是从https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#Using_the_lifecycle_callbacks https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#Using_the_lifecycle_callbacks.

作为一名没有 WebComponent 经验的开发人员,我试图了解迄今为止推荐的所有经验法则和最佳实践。

继续阅读它说“...使用 Node.isConnected 来确保”。它的含义很明显:检查它是否仍然连接,但至少对我来说,尚不清楚我应该采取什么措施来解决它,或者在某些情况下我应该期待什么。

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

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

另外,我没有读过任何推荐最佳实践 https://developers.google.com/web/fundamentals/web-components/best-practices视为“不再连接的元素”。

我读了一些精彩的讨论:

可以在光盘之前调用自定义元素连接回调多次吗 https://stackoverflow.com/questions/54874212/can-a-custom-elements-connectedcallback-be-called-more-than-once-before-disc

从那里我了解到我始终可以信任这个生命周期构造函数 -->connectedCallback -->disconnectedCallback。

And

当所有子自定义元素已连接时如何拥有“connectedCallback” https://stackoverflow.com/questions/48663678/how-to-have-a-connectedcallback-for-when-all-child-custom-elements-have-been-c

基本上我了解到没有一个特定的方法“在所有孩子都升级后调用”

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

我粘贴了下面的代码进行说明,完整的 Web 组件示例可以从https://github.com/jimisdrpc/simplest-webcomponet https://github.com/jimisdrpc/simplest-webcomponet及其后端https://github.com/jimisdrpc/simplest-kafkaconsumer 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 组件,则这种情况永远不会发生。实际上,您的自定义元素永远不会断开连接,直到页面关闭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理“一旦你的元素不再连接就可以调用connectedCallback”编码Web组件 的相关文章

随机推荐

  • Eclipse 隐形编辑器

    我有日食朱诺 我不知道如何 但我在 Eclipse 中的编辑器现在是 隐形的 我所说的不可见是指编辑器窗格不在可见窗口中 我不是 Eclipse 的新手 我知道您可以最小化编辑器或最大化不同的面板 但事实并非如此 编辑器所在的空白区域甚至没
  • @import 与 #import - iOS 7

    我正在尝试一些新的 iOS 7 功能 并使用 WWDC 视频 在 iOS 上实现引人入胜的 UI 中讨论的一些图像效果 为了在会话的源代码中产生模糊效果 UIImage通过导入 UIKit 的类别进行扩展 如下所示 import UIKit
  • 如何借用字段进行序列化但在反序列化时创建它?

    我有一个这样的结构 derive Serialize Deserialize struct Thing pub small header Header pub big body Body 我想把这个连载Thing通过网络发送 我已经有一个B
  • 在 Eclipse 文本编辑器中,如何将段落重新格式化/填充/对齐为 80 个字符宽?

    在 Eclipse 中编辑文本文件 例如 README 文件 时 我还没有找到一种方法让编辑器重新格式化文本段落 以便它们适合合理的宽度 通常为 80 个字符 这看起来应该是一件很平常想做的事情 但是我还没有找到 有人可以帮忙吗 请注意 我
  • Android - 两个设备之间的通信

    安装在两台设备上的 Android 应用程序相互通信的最佳方式是什么 设备可以直接连接而不使用短信吗 根据您的要求和设置 您有多种选择 如果您的设备彼此距离非常近 最多约 10 米 您可以按照 Derek 的建议使用蓝牙进行通信 如果您的设
  • jQuery - 等待函数返回值

    我有一个 jquery 函数 用于使用 ajax 请求发送电子邮件 function sendMail from to subject message var datastr from from to to subject subject
  • Java 中 PKCS#5 PBKDF1 的算法名称是什么?

    我在使用密码学方面有几个问题 我正在使用 AES 问题一 我正在尝试使用SecretKeyFactory班级在 我正在尝试获取与 PBKDF1 PKCS 5 相关的实例 我是密码学新手 我在网上尝试过 但找不到任何此类算法 确实支持 我想要
  • 脚本文件与命令行:rsync 和 --exclude

    我有一个简单的测试 bash 脚本 如下所示 bin bash cmd rsync rv exclude dir new cmd execute command 当我运行脚本时 它还会复制以 尽管我本想排除他们 当我直接从命令行运行相同的
  • 如何通过滑动动画以编程方式在 FlipView 中导航

    Windows 开发中心声明UseTouchAnimationsForAllNavigation财产 XAML FlipView 控件支持三种导航模式 基于触摸 基于按钮和程序化 当用户通过触摸导航时 FlipView 项目会平滑地滚动到视
  • sql注入场景中格式化函数与参数?

    我知道 sql 语句中参数的使用 但出于好奇 使用 Format 函数来防止 sql 注入而不是使用参数是安全的 像这个样本 sCustomer string begin AdoSql CommandText Format Select S
  • 故障排除“运行时编译器未加载”

    使用以下命令构建 Angular2 应用程序后 出现以下运行时错误 prod flag 运行时编译器未加载 据我了解 生产版本使用 AoT 并且在此场景中不支持运行时编译 我的问题是 我不知道我正在做的任何事情都需要运行时编译器 它甚至可能
  • 连接空间数据时如何解决球面几何故障

    我有一个形状文件 带有多个多边形 和一个带有坐标的数据框 我想将数据框中的每个坐标分配给形状文件中的多边形 因此 要在数据框中添加具有多边形名称或 ID 的列 这里是链接到数据 https docs google com spreadshe
  • 如何读取程序加载解决方案一部分的文件?

    我正在编写一个 C WinForms 应用程序 该应用程序的组件之一是 SQLite 数据库 如果用户第一次运行该程序 该程序应该在用户的主目录中创建必要的文件夹和文件 即数据库文件 效果很好 不过 还需要建立数据库 即需要添加表 我有一个
  • 不确定的 NSProgressIndicator 将不会动画

    所以我有一个简单的用户界面 一个 开始 按钮 一些文本 标签和一个进度栏 单击 开始 按钮时 NSProgressIndicatorshould动画 这是我的代码 synthesize progressBar progressBar Som
  • Turtle 模块 - 保存图像

    我想弄清楚如何在使用 python 的海龟模块创建绘图后保存位图或矢量图形图像 经过一番谷歌搜索后 我找不到简单的答案 我确实找到了一个名为画布2svg http wm ite pl proj canvas2svg index html 但
  • 为什么 Array.IndexOf 不像 List 那样检查 IEquatable ?

    考虑this https dotnetfiddle net RVgvG0 code public static void Main var item new Item Id 1 IList list new List
  • BeautifulSoup 找不到正确解析的元素

    我在用BeautifulSoup解析一堆可能非常脏的HTML文件 我偶然发现了一件非常奇怪的事情 HTML 来自这个页面 http www wvdnr gov http www wvdnr gov 它包含多个错误 例如多个
  • Angular 通用 + 外部 API

    我知道 Angular Universal 仍在开发中 因此 我考虑过将 Angular Universal 用于一个 Web 应用程序 该应用程序定期从外部 API 服务器提取数据 大约每 10 秒通过 Http 服务提取一次 然后 该数
  • 为什么 UIWebView 中的 Google 搜索结果没有触发 webViewDidFinishLoad?

    毫无疑问 这是一个关于网页的更普遍的问题 但通过 Google 内容很容易证明这一点 在 Google 主页上输入某些搜索条件时 结果不会触发webViewDidFinishLoad方法 当彩色 Google 徽标被链接到功能页面的某些艺术
  • 如何处理“一旦你的元素不再连接就可以调用connectedCallback”编码Web组件

    我的问题中粘贴的那句话是从https developer mozilla org en US docs Web Web Components Using custom elements Using the lifecycle callbac