Merge pull request #1993 from sveltejs/gh-1920

prevent writing to reactive values
pull/2004/head
Rich Harris 6 years ago committed by GitHub
commit ff6e378fcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -881,15 +881,10 @@ export default class Component {
scope = map.get(node);
}
if (parent && parent.type === 'AssignmentExpression' && node === parent.left) {
return this.skip();
}
if (node.type === 'AssignmentExpression') {
assignees.add(getObject(node.left).name);
} else if (node.type === 'UpdateExpression') {
assignees.add(getObject(node.argument).name);
this.skip();
} else if (isReference(node, parent)) {
const object = getObject(node);
const { name } = object;

@ -56,8 +56,8 @@ function instance($$self, $$props, $$invalidate) {
if ('foo' in $$props) $$invalidate('foo', foo = $$props.foo);
};
$$self.$$.update = ($$dirty = { foo: 1 }) => {
if ($$dirty.foo) {
$$self.$$.update = ($$dirty = { bar: 1, foo: 1 }) => {
if ($$dirty.bar || $$dirty.foo) {
bar = foo * 2; $$invalidate('bar', bar);
}
};

@ -0,0 +1,21 @@
export default {
html: `
<p>doubled: 2</p>
`,
test({ assert, component, target }) {
component.a = 2;
assert.equal(component.doubled, 4);
assert.htmlEqual(target.innerHTML, `
<p>doubled: 4</p>
`);
component.doubled = 6;
assert.equal(component.doubled, 4);
assert.htmlEqual(target.innerHTML, `
<p>doubled: 4</p>
`);
}
};

@ -0,0 +1,8 @@
<script>
export let a = 1;
export let doubled;
$: doubled = a * 2;
</script>
<p>doubled: {doubled}</p>
Loading…
Cancel
Save