mirror of https://github.com/sveltejs/svelte
Merge pull request #2865 from sveltejs/less-invalidation
only invalidate referenced valuespull/2882/head
commit
ed72aea3ad
@ -1,7 +1,6 @@
|
||||
<script>
|
||||
let a = 1;
|
||||
let b = 2;
|
||||
export let a = 1;
|
||||
export let b = 2;
|
||||
|
||||
let max;
|
||||
$: max = Math.max(a, b);
|
||||
$: console.log('max', Math.max(a, b));
|
||||
</script>
|
@ -0,0 +1,78 @@
|
||||
/* generated by Svelte vX.Y.Z */
|
||||
import {
|
||||
SvelteComponent,
|
||||
append,
|
||||
detach,
|
||||
element,
|
||||
init,
|
||||
insert,
|
||||
noop,
|
||||
safe_not_equal,
|
||||
set_data,
|
||||
text
|
||||
} from "svelte/internal";
|
||||
import { onMount } from "svelte";
|
||||
|
||||
function create_fragment(ctx) {
|
||||
var p, t;
|
||||
|
||||
return {
|
||||
c() {
|
||||
p = element("p");
|
||||
t = text(ctx.y);
|
||||
},
|
||||
|
||||
m(target, anchor) {
|
||||
insert(target, p, anchor);
|
||||
append(p, t);
|
||||
},
|
||||
|
||||
p(changed, ctx) {
|
||||
if (changed.y) {
|
||||
set_data(t, ctx.y);
|
||||
}
|
||||
},
|
||||
|
||||
i: noop,
|
||||
o: noop,
|
||||
|
||||
d(detaching) {
|
||||
if (detaching) {
|
||||
detach(p);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function instance($$self, $$props, $$invalidate) {
|
||||
let a, b, c;
|
||||
|
||||
onMount(() => {
|
||||
const interval = setInterval(() => {
|
||||
$$invalidate('b', b += 1);
|
||||
c += 1;
|
||||
|
||||
console.log(b, c);
|
||||
}, 1000);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
});
|
||||
|
||||
let x, y;
|
||||
|
||||
$$self.$$.update = ($$dirty = { a: 1, b: 1 }) => {
|
||||
if ($$dirty.a) { x = a * 2; }
|
||||
if ($$dirty.b) { $$invalidate('y', y = b * 2); }
|
||||
};
|
||||
|
||||
return { y };
|
||||
}
|
||||
|
||||
class Component extends SvelteComponent {
|
||||
constructor(options) {
|
||||
super();
|
||||
init(this, options, instance, create_fragment, safe_not_equal, []);
|
||||
}
|
||||
}
|
||||
|
||||
export default Component;
|
@ -0,0 +1,21 @@
|
||||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
|
||||
let a, b, c;
|
||||
|
||||
onMount(() => {
|
||||
const interval = setInterval(() => {
|
||||
b += 1;
|
||||
c += 1;
|
||||
|
||||
console.log(b, c);
|
||||
}, 1000);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
});
|
||||
|
||||
$: x = a * 2;
|
||||
$: y = b * 2;
|
||||
</script>
|
||||
|
||||
<p>{y}</p>
|
@ -1,16 +1,35 @@
|
||||
export default {
|
||||
immutable: true,
|
||||
|
||||
html: `<div><h3>Called 1 times.</h3></div>`,
|
||||
html: `
|
||||
<div>
|
||||
<h3>Called 1 times.</h3>
|
||||
<p>baz true</p>
|
||||
</div>
|
||||
`,
|
||||
|
||||
ssrHtml: `<div><h3>Called 0 times.</h3></div>`,
|
||||
ssrHtml: `
|
||||
<div>
|
||||
<h3>Called 0 times.</h3>
|
||||
<p>baz false</p>
|
||||
</div>`,
|
||||
|
||||
test({ assert, component, target, window }) {
|
||||
test({ assert, component, target }) {
|
||||
var nested = component.nested;
|
||||
|
||||
assert.htmlEqual(target.innerHTML, `<div><h3>Called 1 times.</h3></div>`);
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>
|
||||
<h3>Called 1 times.</h3>
|
||||
<p>baz true</p>
|
||||
</div>
|
||||
`);
|
||||
|
||||
nested.foo = nested.foo;
|
||||
assert.htmlEqual(target.innerHTML, `<div><h3>Called 1 times.</h3></div>`);
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>
|
||||
<h3>Called 1 times.</h3>
|
||||
<p>baz true</p>
|
||||
</div>
|
||||
`);
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in new issue