Jim*_*m C 6 html javascript web-component custom-element native-web-component
我的问题中粘贴的声明是从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响应。
到目前为止,我所做的所有简单示例都没有遇到任何元素在连接回调期间不再连接的问题。
此外,我没有阅读最佳实践中关于“不再连接的元素”的任何建议。
我读了一些精彩的讨论:
从那里我了解到我始终可以信任这个生命周期构造函数 -->connectedCallback -->disconnectedCallback。
和
当所有子自定义元素已连接时如何拥有“connectedCallback”
基本上我了解到没有一个特定的方法“在所有孩子都升级后调用”
这两个问题都接近我的问题,但它没有回答我:应该注意哪些挑战或风险,或者如何解决“一旦元素不再连接,可能会调用connectedCallback”的可能性?在我上述的情况下,我是否缺少任何治疗?我是否应该创建一些观察者,当该元素不再可用时触发,以重新创建事件源对象并再次向此类事件源对象添加侦听器?
我粘贴了下面的代码进行说明,完整的 Web 组件示例可以从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);
Run Code Online (Sandbox Code Playgroud)
自定义元素断开连接后调用的唯一情况connectedCallback()是当您使用它时:创建它后很快移动或删除它有时可能会导致这种情况。
在您描述的用例中,如果您使用持久的单页面应用程序来托管 Web 组件,则这种情况永远不会发生。实际上,您的自定义元素永远不会断开连接,直到页面关闭。
| 归档时间: |
|
| 查看次数: |
3096 次 |
| 最近记录: |