Form actions handle mutations to safely change data on the server when a user submits a form. This keeps your app organized and secure.
Why form actions handle mutations in Svelte
export const actions = { default: async ({ request }) => { const formData = await request.formData(); // process formData and perform mutation return { success: true }; } };
The actions object defines functions that run when a form is submitted.
Each function receives the form data and can update the server or database.
export const actions = { default: async ({ request }) => { const data = await request.formData(); const name = data.get('name'); // save name to database return { success: true }; } };
export const actions = { updateProfile: async ({ request }) => { const data = await request.formData(); const email = data.get('email'); // update user email in database return { updated: true }; } };
This SvelteKit example uses a form in +page.svelte and a default action in +page.server.js to handle the form submission. When the user submits the username, the action reads it and returns a success message, which is displayed on the page after re-render.
<!-- +page.svelte --> <script> export let data; </script> <form method="POST"> <label for="username">Username:</label> <input id="username" name="username" required /> <button type="submit">Save</button> {#if data?.message} <p>{data.message}</p> {/if} </form> <!-- +page.server.js --> export const actions = { default: async ({ request }) => { const formData = await request.formData(); const username = formData.get('username'); // pretend to save username return { success: true, message: `Saved username: ${username}` }; } };
Form actions run on the server, so they can safely change data without exposing logic to the browser.
Using form actions helps keep your app secure and organized by separating data changes from UI code.
Form actions handle data changes when users submit forms.
They run on the server to keep data safe and app organized.
Use them to process, validate, and save form data smoothly.
Practice
Solution
Step 1: Understand the role of form actions
Form actions run on the server to process data changes securely and keep the app organized.Step 2: Identify why server-side handling is important
Handling mutations on the server protects data and centralizes logic, avoiding client-side risks.Final Answer:
To keep data safe and maintain app organization -> Option CQuick Check:
Server safety = A [OK]
- Thinking form actions only style the form
- Believing client-side handles all data changes
- Confusing rendering speed with data safety
Solution
Step 1: Recall SvelteKit form action syntax
Form actions are exported as an object namedactionswith async functions for each action.Step 2: Match the correct syntax
export const actions = { default: async ({ request }) => { /* handle */ } };correctly exportsactionswith a default async function receiving{ request }.Final Answer:
export const actions = { default: async ({ request }) => { /* handle */ } }; -> Option DQuick Check:
Correct export syntax = C [OK]
- Using function instead of exported const
- Missing async keyword
- Wrong function name like 'action' instead of 'actions'
export const actions = {
default: async ({ request }) => {
const data = await request.formData();
const name = data.get('name');
if (!name) return { error: 'Name required' };
return { success: `Hello, ${name}!` };
}
};What will be the returned object if the form submits with
name field empty?Solution
Step 1: Analyze the form data handling
The code gets the 'name' field from the form data and checks if it exists.Step 2: Check the condition for empty name
If 'name' is missing or empty, it returns an object with an error message.Final Answer:
{ error: 'Name required' } -> Option AQuick Check:
Empty name triggers error = D [OK]
- Assuming success message with empty name
- Expecting empty object instead of error
- Thinking code throws runtime error
export const actions = {
default: async ({ request }) => {
const data = request.formData();
const age = data.get('age');
if (age < 18) return { error: 'Too young' };
return { success: 'Welcome!' };
}
};Solution
Step 1: Check asynchronous call to formData()
request.formData() returns a Promise, so it must be awaited.Step 2: Identify missing await causing error
Without await, age will be undefined, causing incorrect comparison.Final Answer:
Missing await before request.formData() -> Option AQuick Check:
Async formData needs await = A [OK]
- Forgetting await on formData()
- Mixing comparison operators incorrectly
- Thinking returning object is an error
Solution
Step 1: Understand safe mutation handling
Server-side form actions validate and save data securely, preventing bad data or attacks.Step 2: Connect server response to UI update
Returning status from the action lets the UI show success or errors smoothly.Final Answer:
Use a server-side form action to validate and save data, then return status for UI update -> Option BQuick Check:
Server validation + UI feedback = B [OK]
- Mutating data only on client risking bad data
- Reloading page instead of smooth UI update
- Skipping validation before saving data
Ready to prove it?
Pass the test and this pattern moves unknown
