- From: br3nt <notifications@github.com>
- Date: Wed, 16 Oct 2024 14:30:17 -0700
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/1081@github.com>
In my custom components with observable attributes, I've noticed that `attributeChangedCallback()` is called multiple times before `connectedCallback()` is called. Even though `connectedCallback()` hasn't been called yet, the value of `isConnected` in the earlier `attributeChangedCallback()` calls is true. This occurs when a custom element is defined directly on the HTML page. The problem with this is there is no flag I can check to prevent unnecessarily re-rendering the element content before all attributes are initialised. E.g.: ```html <body> <my-custom-element attr1="a" attrr2="b" attr3="c" </body> ``` The example component may look like this: ```js class MyCustomElement extends HTMLElement { static get observedAttributes() { return ["attr1", "attr2", "attr3", "attr4", /* ... etc */ ]; } connectedCallback() { this.render(); } attributeChangedCallback(name, oldValue, newValue) { this.render(); } render() { // this doesn't prevent any unnecessary re-rerendering because the element is already connected // even though connectedCallback() hasn't been called yet if (!this.isConnected) return; this.innerHTML = renderFunction.render(this.attributes) } } ``` In this example, `attributeChangedCallback()` is called three times, and `this.isConnected` is `true` each time. Finally, `connectedCallback()` is called. This is problematic because I want to prevent unnecessary (re-)rendering of the element content until all the attributes defined in the HTML have been initialised due to the expense of computing the content for the element. Now, I can manually add a flag and set it to true when `connectedCallback()` and false when `disconnectedCallback()` is called. But I'm pretty sure every developer using web components would want/need this flag, so it makes sense for this to be part of the web component specification. Ideally, I would like one or both of: * A flag that is `false` before the call to `connectedCallback()` and `true` after the initial calls to `attributeChangedCallback()` for each of the defined attributes. * An appropriate flag name might be `attributesInitialised` or `attributesInitialized` * A callback that gets called between the initial calls to `attributeChangedCallback()` and the call to `connectedCallback()` * An appropriate callback name might be `attributesInitialisedCallback` or `attributesInitializedCallback` -- Reply to this email directly or view it on GitHub: https://github.com/WICG/webcomponents/issues/1081 You are receiving this because you are subscribed to this thread. Message ID: <WICG/webcomponents/issues/1081@github.com>
Received on Wednesday, 16 October 2024 21:30:21 UTC