mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
prevent useless rerenders when updatingEnv on unmounted component
fix #4
This commit is contained in:
+3
-1
@@ -280,7 +280,9 @@ export class Component<
|
|||||||
this.env = Object.create(this.env);
|
this.env = Object.create(this.env);
|
||||||
}
|
}
|
||||||
Object.assign(this.env, nextEnv);
|
Object.assign(this.env, nextEnv);
|
||||||
return this.render();
|
if (this.__widget__.isMounted) {
|
||||||
|
return this.render();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateProps(nextProps: Props): Promise<void> {
|
async updateProps(nextProps: Props): Promise<void> {
|
||||||
|
|||||||
@@ -1096,6 +1096,29 @@ describe("updating environment", () => {
|
|||||||
expect((<any>widget).env.somekey).toBe(4);
|
expect((<any>widget).env.somekey).toBe(4);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("updating widget env does not render widget (if not mounted)", async () => {
|
||||||
|
let n = 0;
|
||||||
|
class TestWidget extends Widget {
|
||||||
|
_render() {
|
||||||
|
n++;
|
||||||
|
return super._render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const widget = new TestWidget(env);
|
||||||
|
expect(n).toBe(0);
|
||||||
|
await widget.updateEnv(<any>{ somekey: 4 });
|
||||||
|
expect(n).toBe(0);
|
||||||
|
await widget.mount(fixture);
|
||||||
|
expect(n).toBe(1);
|
||||||
|
await widget.updateEnv(<any>{ somekey: 5 });
|
||||||
|
expect(n).toBe(2);
|
||||||
|
widget.detach();
|
||||||
|
expect(n).toBe(2);
|
||||||
|
await widget.updateEnv(<any>{ somekey: 5 });
|
||||||
|
expect(n).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
test("updating child env does not modify parent env", async () => {
|
test("updating child env does not modify parent env", async () => {
|
||||||
class ParentWidget extends Widget {
|
class ParentWidget extends Widget {
|
||||||
inlineTemplate = `<div><t t-widget="child"/></div>`;
|
inlineTemplate = `<div><t t-widget="child"/></div>`;
|
||||||
|
|||||||
Reference in New Issue
Block a user