よっしー
こんにちは。よっしーです(^^)
今日は、SvelteKitでのフォームアクションについて解説しています。
背景
SvelteKitでのフォームアクションについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
SvelteKitでのフォームアクションについて
+page.server.js
ファイルでは「アクション」をエクスポートできます。これにより、<form>
要素を使用してサーバーにデータをPOST
することが可能になります。<form>
を使用する際、クライアントサイドのJavaScriptは任意ですが、JavaScriptを使って簡単にフォームの操作を段階的に強化し、最高のユーザー体験を提供することができます。
データのローディング
アクションが実行された後、ページは再レンダリングされます(リダイレクトや予期せぬエラーが発生しない限り)。このとき、アクションの戻り値がform
プロパティとしてページで利用可能になります。つまり、ページのload
関数はアクションの完了後に実行されます。
注意点として、handle
はアクションが呼び出される前に実行され、load
関数の前に再実行されることはありません。そのため、例えばhandle
を使ってクッキーに基づいてevent.locals
を設定している場合、アクション内でクッキーを設定または削除する際にはevent.locals
を更新する必要があります。
// src/hooks.server.js
/** @type {import('@sveltejs/kit').Handle} */
export async function handle({ event, resolve }) {
event.locals.user = await getUser(event.cookies.get('sessionid'));
return resolve(event);
}
// src/routes/account/+page.server.js
/** @type {import('./$types').PageServerLoad} */
export function load(event) {
return {
user: event.locals.user
};
}
/** @type {import('./$types').Actions} */
export const actions = {
logout: async (event) => {
event.cookies.delete('sessionid', { path: '/' });
event.locals.user = null;
}
};
おわりに
今日は、 SvelteKitでのフォームアクションについて解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント