Skip to content

Commit 642ac04

Browse files
committed
[fix] Mount & Update timing of Class components
1 parent b7efb95 commit 642ac04

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "web-cell",
3-
"version": "3.0.0-rc.10",
3+
"version": "3.0.0-rc.14",
44
"description": "Web Components engine based on VDOM, JSX, MobX & TypeScript",
55
"keywords": [
66
"web",

source/WebCell.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import {
77
stringifyDOM
88
} from 'web-utility';
99

10-
import { Defer } from './utility';
11-
1210
export interface ComponentMeta
1311
extends ElementDefinitionOptions,
1412
Partial<ShadowRootInit> {
@@ -24,7 +22,7 @@ export interface WebCell<P = {}> extends CustomElement {
2422
internals: ElementInternals;
2523
renderer: DOMRenderer;
2624
root: ParentNode;
27-
mounted: Defer;
25+
mounted: boolean;
2826
update: () => void;
2927
/**
3028
* Called at DOM tree updated
@@ -64,7 +62,7 @@ export function component(meta: ComponentMeta) {
6462
get root(): ParentNode {
6563
return this.internals.shadowRoot || this;
6664
}
67-
mounted = new Defer();
65+
mounted = false;
6866
declare mountedCallback?: () => any;
6967

7068
constructor() {
@@ -75,8 +73,6 @@ export function component(meta: ComponentMeta) {
7573
}
7674

7775
connectedCallback() {
78-
this.update();
79-
8076
const { mode } = meta;
8177
const renderChildren = !(mode != null);
8278

@@ -93,8 +89,12 @@ export function component(meta: ComponentMeta) {
9389

9490
super['connectedCallback']?.();
9591

96-
this.mounted.promise.then(this.mountedCallback);
97-
this.mounted.resolve();
92+
if (this.mounted) return;
93+
94+
this.update();
95+
96+
this.mounted = true;
97+
this.mountedCallback?.();
9898
}
9999

100100
declare render?: () => VNode;
@@ -103,11 +103,18 @@ export function component(meta: ComponentMeta) {
103103
update() {
104104
const vNode = this.render?.();
105105

106-
this.renderer.render(
107-
isEmpty(vNode) ? meta.mode ? <slot /> : <></> : vNode,
108-
this.root
106+
const content = isEmpty(vNode) ? (
107+
meta.mode ? (
108+
<slot />
109+
) : null
110+
) : (
111+
vNode
109112
);
110-
this.updatedCallback?.();
113+
114+
if (content != null) {
115+
this.renderer.render(content, this.root);
116+
this.updatedCallback?.();
117+
}
111118
}
112119

113120
disconnectedCallback() {

0 commit comments

Comments
 (0)