diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index e1c97fe8b4..20267fdd06 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -243,15 +243,19 @@ export default class Component extends Node { let setFromChild; - if (block.contexts.has(key)) { + if (block.contexts.has(key)) { // TODO remove block.contexts const computed = isComputed(binding.value.node); const tail = binding.value.node.type === 'MemberExpression' ? getTailSnippet(binding.value.node) : ''; const list = block.listNames.get(key); const index = block.indexNames.get(key); + const lhs = binding.value.node.type === 'MemberExpression' + ? binding.value.snippet + : `ctx.${list}[ctx.${index}]${tail} = childState.${binding.name}`; + setFromChild = deindent` - ${list}[${index}]${tail} = childState.${binding.name}; + ${lhs} = childState.${binding.name}; ${[...binding.value.dependencies] .map((name: string) => { @@ -307,8 +311,9 @@ export default class Component extends Node { `); }); + block.maintainContext = true; // TODO put this somewhere more logical + const initialisers = [ - 'ctx = #component.get()', hasLocalBindings && 'newState = {}', hasStoreBindings && 'newStoreState = {}', ].filter(Boolean).join(', ');