diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts index e706928af3..93ba42e37c 100644 --- a/src/runtime/internal/Component.ts +++ b/src/runtime/internal/Component.ts @@ -124,7 +124,7 @@ export function init(component, options, instance, create_fragment, not_equal, p on_disconnect: [], before_update: [], after_update: [], - context: new Map(parent_component ? parent_component.$$.context : options.context || []), + context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else callbacks: blank_object(), diff --git a/src/runtime/internal/ssr.ts b/src/runtime/internal/ssr.ts index c64d88fa75..fd72aa1548 100644 --- a/src/runtime/internal/ssr.ts +++ b/src/runtime/internal/ssr.ts @@ -91,7 +91,7 @@ export function create_ssr_component(fn) { const $$ = { on_destroy, - context: new Map(parent_component ? parent_component.$$.context : context || []), + context: new Map(context || (parent_component ? parent_component.$$.context : [])), // these will be immediately discarded on_mount: [], diff --git a/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte b/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte new file mode 100644 index 0000000000..af77418a1f --- /dev/null +++ b/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte @@ -0,0 +1,6 @@ + + +
Value in child component: {value}
diff --git a/test/runtime/samples/constructor-prefer-passed-context/_config.js b/test/runtime/samples/constructor-prefer-passed-context/_config.js new file mode 100644 index 0000000000..5d5cf9e44a --- /dev/null +++ b/test/runtime/samples/constructor-prefer-passed-context/_config.js @@ -0,0 +1,6 @@ +export default { + skip_if_ssr: true, + html: ` +
Value in child component: undefined
+ ` +}; diff --git a/test/runtime/samples/constructor-prefer-passed-context/main.svelte b/test/runtime/samples/constructor-prefer-passed-context/main.svelte new file mode 100644 index 0000000000..dd051a123a --- /dev/null +++ b/test/runtime/samples/constructor-prefer-passed-context/main.svelte @@ -0,0 +1,15 @@ + + +
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte b/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte new file mode 100644 index 0000000000..af77418a1f --- /dev/null +++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte @@ -0,0 +1,6 @@ + + +
Value in child component: {value}
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html b/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html new file mode 100644 index 0000000000..d9a67c64e9 --- /dev/null +++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html @@ -0,0 +1 @@ +
Value in child component: undefined
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte b/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte new file mode 100644 index 0000000000..eaf89dd813 --- /dev/null +++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte @@ -0,0 +1,10 @@ + + +
{@html content}