mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] reactivity: new primitives for reactivity
fine grained reactivity: existing key in source changes --> only observer having read the key are notified add/delete key in source changes --> all source observers are notified Co-authored-by: Aaron Bohy <aab@odoo.com> Co-authored-by: Géry Debongnie <ged@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
This commit is contained in:
committed by
Géry Debongnie
parent
6479631983
commit
4e4b85e2a9
@@ -31,6 +31,28 @@ describe("reactivity in lifecycle", () => {
|
||||
expect(fixture.innerHTML).toBe("<div>3</div>");
|
||||
});
|
||||
|
||||
test("can use a state hook 2", async () => {
|
||||
let n = 0;
|
||||
class Comp extends Component {
|
||||
static template = xml`<div><t t-esc="state.a"/></div>`;
|
||||
state = useState({ a: 5, b: 7 });
|
||||
setup() {
|
||||
onRender(() => n++);
|
||||
}
|
||||
}
|
||||
const comp = await mount(Comp, fixture);
|
||||
expect(fixture.innerHTML).toBe("<div>5</div>");
|
||||
expect(n).toBe(1);
|
||||
comp.state.a = 11;
|
||||
await nextTick();
|
||||
expect(fixture.innerHTML).toBe("<div>11</div>");
|
||||
expect(n).toBe(2);
|
||||
comp.state.b = 13;
|
||||
await nextTick();
|
||||
expect(fixture.innerHTML).toBe("<div>11</div>");
|
||||
expect(n).toBe(2); // no new rendering occured: b was never read via state!
|
||||
});
|
||||
|
||||
test("state changes in willUnmount do not trigger rerender", async () => {
|
||||
const steps: string[] = [];
|
||||
class Child extends Component {
|
||||
|
||||
Reference in New Issue
Block a user