gpt4 book ai didi

javascript - 如何处理 "connectedCallback may be called once your element is no longer connected"编码一个 Webcomponent

转载 作者:搜寻专家 更新时间:2023-10-31 23:15:29 25 4
gpt4 key购买 nike

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

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

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

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

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

此外,我没有阅读 Best Practices 中的任何推荐。视为“不再连接的元素”。

我读了一些优秀的讨论:

can-a-custom-elements-connectedcallback-be-called-more-than-once-before-disc

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

How to have a 'connectedCallback' for when all child custom elements have been connected

基本上我了解到没有“在所有 child 升级后调用”的特定方法

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

我粘贴了下面的代码作为示例,完整的 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 组件,则永远不会发生这种情况。实际上,您的自定义元素永远不会断开连接,直到页面关闭。

关于javascript - 如何处理 "connectedCallback may be called once your element is no longer connected"编码一个 Webcomponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56857611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com