diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts index a6ef0ac69c..622fc034fd 100644 --- a/src/compile/render-dom/index.ts +++ b/src/compile/render-dom/index.ts @@ -169,14 +169,15 @@ export default function dom( scope = scope.parent; } - if (node.type === 'AssignmentExpression') { + if (node.type === 'AssignmentExpression' || node.type === 'UpdateExpression') { + const assignee = node.type === 'AssignmentExpression' ? node.left : node.argument; let names = []; - if (node.left.type === 'MemberExpression') { - const left_object_name = get_object(node.left).name; + if (assignee.type === 'MemberExpression') { + const left_object_name = get_object(assignee).name; left_object_name && (names = [left_object_name]); } else { - names = extract_names(node.left); + names = extract_names(assignee); } if (node.operator === '=' && nodes_match(node.left, node.right)) { @@ -189,9 +190,10 @@ export default function dom( code.overwrite(node.start, node.end, dirty.map(n => component.invalidate(n)).join('; ')); } else { const single = ( - node.left.type === 'Identifier' && + node.type === 'AssignmentExpression' && + assignee.type === 'Identifier' && parent.type === 'ExpressionStatement' && - node.left.name[0] !== '$' + assignee.name[0] !== '$' ); names.forEach(name => { @@ -213,18 +215,6 @@ export default function dom( } } - else if (node.type === 'UpdateExpression') { - const { name } = get_object(node.argument); - - if (scope.find_owner(name) !== component.instance_scope) return; - - const variable = component.var_lookup.get(name); - if (variable && variable.hoistable) return; - - pending_assignments.add(name); - component.has_reactive_assignments = true; - } - if (pending_assignments.size > 0) { if (node.type === 'ArrowFunctionExpression') { const insert = Array.from(pending_assignments).map(name => component.invalidate(name)).join('; '); diff --git a/test/runtime/samples/store-increment-updates-reactive/_config.js b/test/runtime/samples/store-increment-updates-reactive/_config.js new file mode 100644 index 0000000000..f919d724f8 --- /dev/null +++ b/test/runtime/samples/store-increment-updates-reactive/_config.js @@ -0,0 +1,8 @@ +export default { + html: `0`, + + async test({ assert, component, target }) { + await component.increment(); + assert.htmlEqual(target.innerHTML, `1`); + } +}; diff --git a/test/runtime/samples/store-increment-updates-reactive/main.svelte b/test/runtime/samples/store-increment-updates-reactive/main.svelte new file mode 100644 index 0000000000..ceec177f7a --- /dev/null +++ b/test/runtime/samples/store-increment-updates-reactive/main.svelte @@ -0,0 +1,11 @@ + + +{$foo}