0
0
mirror of https://github.com/sveltejs/svelte.git synced 2024-11-29 08:32:05 +01:00

only do dirty check for writable values - fixes #2052

This commit is contained in:
Rich Harris 2019-02-07 11:43:34 -05:00
parent cf775486cf
commit bf16bb89c3
3 changed files with 54 additions and 1 deletions

View File

@ -314,7 +314,13 @@ export default function dom(
if (has_definition) {
const reactive_declarations = component.reactive_declarations.map(d => {
const condition = Array.from(d.dependencies).map(n => `$$dirty.${n}`).join(' || ');
const condition = Array.from(d.dependencies)
.filter(n => {
const variable = component.var_lookup.get(n);
return variable && variable.writable;
})
.map(n => `$$dirty.${n}`).join(' || ');
const snippet = d.node.body.type === 'BlockStatement'
? `[✂${d.node.body.start}-${d.node.end}✂]`
: deindent`

View File

@ -0,0 +1,40 @@
/* generated by Svelte vX.Y.Z */
import { SvelteComponent as SvelteComponent_1, init, noop, safe_not_equal } from "svelte/internal";
function create_fragment(ctx) {
return {
c: noop,
m: noop,
p: noop,
i: noop,
o: noop,
d: noop
};
}
let a = 1;
let b = 2;
function instance($$self, $$props, $$invalidate) {
let max;
$$self.$$.update = ($$dirty = { max: 1, Math: 1, a: 1, b: 1 }) => {
if ($$dirty.max || $$dirty.a || $$dirty.b) {
max = Math.max(a, b); $$invalidate('max', max);
}
};
return {};
}
class SvelteComponent extends SvelteComponent_1 {
constructor(options) {
super();
init(this, options, instance, create_fragment, safe_not_equal);
}
}
export default SvelteComponent;

View File

@ -0,0 +1,7 @@
<script>
let a = 1;
let b = 2;
let max;
$: max = Math.max(a, b);
</script>