Bird
Raised Fist0
Svelteframework~20 mins

Component composition in Svelte - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Svelte Component Composer
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the rendered output of nested components?

Consider two Svelte components: Parent.svelte and Child.svelte. The Parent component includes Child inside its markup. What will be the visible output when Parent is rendered?

Svelte
<!-- Child.svelte -->
<script>
  export let name = "Guest";
</script>
<p>Hello, {name}!</p>

<!-- Parent.svelte -->
<script>
  import Child from './Child.svelte';
</script>
<div>
  <h1>Welcome</h1>
  <Child name="Alice" />
</div>
A<div><h1>Welcome</h1><p>Hello, Alice!</p></div>
B<div><h1>Welcome</h1></div>
C<div><h1>Welcome</h1><p>Hello, Guest!</p></div>
D<p>Hello, Alice!</p>
Attempts:
2 left
💡 Hint

Think about how props are passed from parent to child components in Svelte.

❓ state_output
intermediate
2:00remaining
How does state update propagate in composed components?

Given a parent component that passes a writable store to a child component, what will be the displayed count after clicking the button once?

Svelte
<!-- Counter.svelte -->
<script>
  import { writable } from 'svelte/store';
  export let countStore;
</script>
<button on:click={() => countStore.update(n => n + 1)}>
  Increment
</button>
<p>Count: {$countStore}</p>

<!-- App.svelte -->
<script>
  import Counter from './Counter.svelte';
  import { writable } from 'svelte/store';
  const count = writable(0);
</script>
<Counter countStore={count} />
ACount: 1
BCount: 0
CCount: undefined
DCount: NaN
Attempts:
2 left
💡 Hint

Remember how Svelte stores work and how the $ prefix unwraps store values reactively.

📝 Syntax
advanced
2:00remaining
Which option correctly forwards all props to a child component?

In Svelte, you want a wrapper component to pass all received props to its child component without listing them individually. Which code snippet achieves this?

Svelte
<!-- Wrapper.svelte -->
<script>
  import Child from './Child.svelte';
</script>
<Child {...$$props} />
A<Child {...props} />
B<Child {...$props} />
C<Child {...this.props} />
D<Child {...$$props} />
Attempts:
2 left
💡 Hint

Check Svelte's special variable for forwarding all props.

🔧 Debug
advanced
2:00remaining
Why does this composed component fail to update on prop change?

Consider a parent component passing a prop to a child component. The child uses the prop to initialize a local variable but does not update when the prop changes. Why?

Svelte
<!-- Child.svelte -->
<script>
  export let count;
  let localCount = count;
</script>
<p>Local count: {localCount}</p>

<!-- Parent.svelte -->
<script>
  import Child from './Child.svelte';
  let count = 0;
  function increment() {
    count += 1;
  }
</script>
<button on:click={increment}>Increment</button>
<Child count={count} />
AThe parent component does not pass the count prop properly.
BThe child component does not export the count prop correctly.
ClocalCount is only set once on component creation and does not react to prop changes.
DSvelte does not support passing props to child components.
Attempts:
2 left
💡 Hint

Think about how local variables initialized from props behave in Svelte.

🧠 Conceptual
expert
2:00remaining
What is the role of in Svelte component composition?

In Svelte, what does the <slot> element do inside a component?

A<slot> is a directive to conditionally render parts of the component.
B<slot> defines where child content passed between component tags will be inserted.
C<slot> automatically binds all props from parent to child components.
D<slot> is used to import external CSS styles into the component.
Attempts:
2 left
💡 Hint

Think about how you pass custom content inside component tags.

Practice

(1/5)
1. What is the main purpose of component composition in Svelte?
easy
A. To write all UI code in one big file
B. To build UI by combining smaller components
C. To avoid using any components
D. To make components run faster

Solution

  1. Step 1: Understand component composition

    Component composition means creating a UI by putting smaller components together.
  2. Step 2: Compare options

    Only To build UI by combining smaller components correctly describes this purpose. Other options are incorrect or unrelated.
  3. Final Answer:

    To build UI by combining smaller components -> Option B
  4. Quick Check:

    Component composition = combining components [OK]
Hint: Think: How do you build complex UI simply? [OK]
Common Mistakes:
  • Thinking composition means one big file
  • Believing components slow down the app
  • Ignoring the reuse benefit
2. Which of the following is the correct way to include a child component Child.svelte inside Parent.svelte?
easy
A. <script>import Child from './Child.svelte';</script><Child />
B. <Child /> without import
C. <script>import Child from './Child.svelte';</script><child />
D. <script>import './Child.svelte';</script><Child />

Solution

  1. Step 1: Check import syntax

    In Svelte, you must import the component with a name, e.g., import Child from './Child.svelte'.
  2. Step 2: Use the imported component tag

    Use <Child /> with capital C matching import name. <script>import Child from './Child.svelte';</script><Child /> matches this exactly.
  3. Final Answer:

    <script>import Child from './Child.svelte';</script><Child /> -> Option A
  4. Quick Check:

    Import + matching tag = correct syntax [OK]
Hint: Always import before using component tags [OK]
Common Mistakes:
  • Using component tags without import
  • Using lowercase tag names for imported components
  • Importing without naming the component
3. Given these two components, what will be rendered inside App.svelte?
// Child.svelte
<h2>Hello from Child</h2>

// App.svelte
<script>
  import Child from './Child.svelte';
</script>

<main>
  <h1>Welcome</h1>
  <Child />
</main>
medium
A.

Hello from Child

B.

Welcome

C.

Welcome

Hello from Child

D. Nothing renders due to error

Solution

  1. Step 1: Analyze App.svelte structure

    App renders a main with <h1>Welcome</h1> and includes <Child /> component.
  2. Step 2: Check Child.svelte output

    Child renders <h2>Hello from Child</h2>.
  3. Step 3: Combine outputs

    App will show <h1>Welcome</h1> followed by Child's <h2>Hello from Child</h2>.
  4. Final Answer:

    <h1>Welcome</h1><h2>Hello from Child</h2> -> Option C
  5. Quick Check:

    Parent + child render combined [OK]
Hint: Child component content appears where tag is placed [OK]
Common Mistakes:
  • Ignoring child component output
  • Thinking child replaces parent content
  • Assuming syntax error without cause
4. What is wrong with this Svelte component composition code?
// Parent.svelte
<script>
  import Child from './Child.svelte';
</script>

<main>
  <child />
</main>
medium
A. Component tag <child /> should be capitalized as <Child />
B. Missing import statement for Child
C. Parent component cannot use Child component
D. The <main> tag is invalid here

Solution

  1. Step 1: Check import and usage

    Child is imported as Child with capital C.
  2. Step 2: Check component tag case

    Svelte requires component tags to match import name case exactly. <child /> is lowercase and invalid.
  3. Final Answer:

    Component tag <child /> should be capitalized as <Child /> -> Option A
  4. Quick Check:

    Component tags are case-sensitive [OK]
Hint: Match component tag case to import name exactly [OK]
Common Mistakes:
  • Using lowercase component tags
  • Forgetting case sensitivity
  • Assuming missing import
5. You want to create a Dashboard.svelte that shows a Header, a Sidebar, and a Content component. Which approach correctly composes these components to keep the layout organized and reusable?
hard
A. <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <Header /> <Sidebar />
B. <script>import Header from './Header.svelte';</script> <Header /> <Sidebar /> <Content />
C. <script>import * from './components';</script> <Header /><Sidebar /><Content />
D. <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <div class='dashboard'> <Header /> <Sidebar /> <Content /> </div>

Solution

  1. Step 1: Check imports for all components

    <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <div class='dashboard'> <Header /> <Sidebar /> <Content /> </div> imports Header, Sidebar, and Content correctly.
  2. Step 2: Check usage inside a container

    <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <div class='dashboard'> <Header /> <Sidebar /> <Content /> </div> uses a container div to organize components, making layout clear and reusable.
  3. Step 3: Compare other options

    <script>import Header from './Header.svelte';</script> <Header /> <Sidebar /> <Content /> misses imports for Sidebar and Content. <script>import * from './components';</script> <Header /><Sidebar /><Content /> uses invalid import syntax. <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <Header /> <Sidebar /> misses Content usage.
  4. Final Answer:

    <script>import Header from './Header.svelte'; import Sidebar from './Sidebar.svelte'; import Content from './Content.svelte';</script> <div class='dashboard'> <Header /> <Sidebar /> <Content /> </div> -> Option D
  5. Quick Check:

    Import all + use all components inside container [OK]
Hint: Import and use all components inside one container [OK]
Common Mistakes:
  • Forgetting to import all components
  • Using invalid import syntax
  • Not including all components in layout
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard