Bindings let your app keep data and the user interface in sync automatically. When the user changes something, the data updates, and when the data changes, the interface updates.
You want a form input to update a variable as the user types.
You want a slider to change a value and show the new value instantly.
You want to keep a checkbox state and a variable linked together.
You want to reflect changes in data immediately in the UI without extra code.
Syntax
Svelte
<input bind:value={variable} />
The bind:value syntax connects the input's value to the variable.
Changes in the input update the variable, and changes in the variable update the input.
Examples
This example shows a text input bound to the name variable. Typing updates name, and the greeting updates instantly.
Svelte
<script>
let name = '';
</script>
<input bind:value={name} placeholder="Enter your name" />
<p>Hello {name}!</p>
This checkbox is bound to checked. Clicking it updates the variable and the text below.
This simple Svelte component binds the input's value to the message variable. Whatever you type shows immediately below.
Svelte
<script>
let message = '';
</script>
<label for="msg">Type a message:</label>
<input id="msg" bind:value={message} placeholder="Write something..." />
<p>You typed: {message}</p>
OutputSuccess
Important Notes
Bindings reduce the need for manual event listeners and state updates.
They work with many form elements like inputs, checkboxes, selects, and textareas.
Remember to use bind: prefix to enable two-way binding in Svelte.
Summary
Bindings keep data and UI in sync automatically.
They make user input update variables and variables update UI instantly.
Use bind: syntax on form elements for easy two-way data flow.
Practice
(1/5)
1. What is the main reason bind: in Svelte enables two-way data flow?
easy
A. It links a variable and an input element so changes update both automatically.
B. It only updates the variable when the page loads.
C. It sends data to the server without user interaction.
D. It disables user input to prevent changes.
Solution
Step 1: Understand what bind: does in Svelte
The bind: directive connects a variable to an input element, so when the user types, the variable updates automatically.
Step 2: Recognize two-way data flow
This connection also means if the variable changes in code, the input updates, creating two-way syncing.
Final Answer:
It links a variable and an input element so changes update both automatically. -> Option A
Quick Check:
Two-way data flow = automatic sync both ways [OK]
Hint: Remember: bind means variable and UI update each other [OK]
Common Mistakes:
Thinking bind only updates on page load
Confusing bind with one-way data flow
Assuming bind disables input
2. Which of the following is the correct syntax to bind a variable name to an input field in Svelte?
easy
A.
B.
C.
D.
Solution
Step 1: Recall Svelte binding syntax for inputs
In Svelte, to bind a variable to an input's value, use bind:value={variable}.
Step 2: Check each option
<input bind:value={name} /> matches the correct syntax. <input bind:name={name} />, <input bind={name} />, and <input value:bind={name} /> use incorrect or invalid syntax.
Final Answer:
<input bind:value={name} /> -> Option A
Quick Check:
Correct bind syntax = bind:value [OK]
Hint: Use bind:value for input fields in Svelte [OK]
Common Mistakes:
Using bind:name instead of bind:value
Omitting the property name in bind
Placing bind after value attribute incorrectly
3. Given this Svelte code:
<script>
let count = 0;
</script>
<input type="number" bind:value={count} />
<p>Count is {count}</p>
What happens when the user types 5 in the input?
medium
A. Typing is disabled because count is a number.
B. The paragraph stays at 'Count is 0' until the page reloads.
C. The paragraph updates to show 'Count is 5' immediately.
D. The input resets to 0 automatically.
Solution
Step 1: Understand binding effect on input and variable
Binding count to the input means typing updates count immediately.
Step 2: Observe UI update
The paragraph uses {count}, so it updates instantly to show the new value typed.
Final Answer:
The paragraph updates to show 'Count is 5' immediately. -> Option C
Quick Check:
Input changes update variable and UI instantly [OK]
Hint: Binding updates variable and UI as you type [OK]
Common Mistakes:
Thinking UI updates only after reload
Assuming input resets automatically
Believing number type disables typing
4. Consider this Svelte snippet:
<script>
let text = '';
</script>
<input bind:value={txt} />
<p>You typed: {text}</p>
Why does typing in the input not update the paragraph?
medium
A. Because bind:value only works with numbers.
B. Because the variable txt is not declared in the script.
C. Because the paragraph uses the wrong variable name.
D. Because Svelte does not support binding on input elements.
Solution
Step 1: Check variable declarations
The input binds to txt, but only text is declared in the script.
Step 2: Understand binding requirements
Binding requires the variable to exist; since txt is undefined, input changes don't update anything.
Final Answer:
Because the variable txt is not declared in the script. -> Option B
Quick Check:
Binding variable must be declared [OK]
Hint: Variable in bind must match declared variable name [OK]
Common Mistakes:
Assuming bind:value only works with numbers
Ignoring variable name mismatch
Thinking Svelte doesn't support input binding
5. You want to create a Svelte component where a checkbox controls a variable isChecked and updates a message below. Which code correctly uses binding for two-way data flow?
hard
A.
{isChecked ? 'Checked' : 'Not checked'}
B.
{isChecked ? 'Checked' : 'Not checked'}
C.
{isChecked ? 'Checked' : 'Not checked'}
D.
{isChecked ? 'Checked' : 'Not checked'}
Solution
Step 1: Identify correct binding for checkbox
Checkboxes use bind:checked to sync the boolean variable with the checked state.
Step 2: Verify syntax and binding types
<input type="checkbox" bind:checked={isChecked} /> correctly enables two-way data flow. checked={isChecked} is one-way only. bind={isChecked} lacks the required property name after bind:, making it invalid. bind:isChecked={checked} uses invalid syntax with mismatched variables.