ホームページ ウェブフロントエンド jsチュートリアル コンポーネントから SvelteKit フォーム アクションを呼び出す (またはフォームを送信する)

コンポーネントから SvelteKit フォーム アクションを呼び出す (またはフォームを送信する)

Sep 05, 2024 pm 10:32 PM

Calling a SvelteKit form action (or submitting a form) from a component

SvelteKit コンポーネントからのフォーム送信の処理

サーバー側のフォーム アクションで処理されるように SvelteKit コンポーネントからフォームを送信することは、思っているよりも簡単です。フォームをページ内に置く必要はありません。任意のコンポーネント内に存在し、SvelteKit のサーバー側機能と対話することができます。

この投稿では、コンポーネントからフォームを送信し、+page.server.js のデフォルトのフォーム アクションを使用してフォームを処理し、フォームをバインドする +page.svelte を設定する方法について説明します。

プロジェクトの構造
my-sveltekit-project/
§── src/
│ §── コンポーネント/
│ │ └─ FormTestComponent.svelte
│ §── ルート/
│ │ §── +page.svelte
│ │ └─ テスト/
│ │ └─ +page.server.js
§── 静的/
§── package.json
§── svelte.config.js
§── vite.config.js
└── tsconfig.json


1. FormTestComponent を作成し、フォームを追加します

まず、単純なフォームを含む FormTestComponent を作成しましょう。

<!-- src/lib/components/FormTestComponent.svelte -->
<script>
  export let form;
</script>

<form>
  <input id="test" name="test" />
  <button type="submit"> Submit </button>
</form>
  • FormInput コンポーネントは、ここでフォームに使用されるカスタム入力フィールドです。
  • {form} は form={form} の短縮形で、ページからこのコンポーネントに渡されたフォーム オブジェクトをバインドします。

この時点で、コンポーネント内で使用できる基本的なフォームが完成しましたが、まだサーバー側のフォーム処理に接続されていません。


2. フォーム バインド用に +page.svelte を設定する

次に、FormTestComponent を使用する +page.svelte ファイルを作成し、そのフォーム プロップをバインドします。

<!-- routes/+page.svelte -->
<script>
  import FormTestComponent from "$lib/components/FormTestComponent.svelte";
  export let form; // This comes from the page’s server-side form response
</script>

<FormTestComponent {form} />

重要なポイント:

  • export let form;: フォーム オブジェクトはサーバー上のフォーム アクションの応答から取得され、FormTestComponent に渡されます。これにより、フォーム応答データがコンポーネント内のフォーム プロパティにバインドされます。
  • 反応性: フォームがサーバー上で送信および更新されると、フォーム オブジェクトはこれらの変更をクライアント側に反映し、すべての同期を保ちます。

3. FormTestComponent でのフォーム送信の強化

フォームの送信を効率的に処理するために、SvelteKit は use:enhance ディレクティブを提供します。これにより、ページ全体をリロードせずに送信を処理するなど、段階的な拡張機能を使用してフォームを拡張できます。

FormTestComponent でフォーム送信を強化する方法は次のとおりです。

<!-- src/lib/components/FormTestComponent.svelte -->
<script>
  import { enhance } from "$app/forms";
  import FormInput from "$components/forms/FormInput.svelte";
  import { page } from "$app/stores";

  let loading = false;
  export let form;
  $: console.log(form); // Log form response for debugging
</script>

<form
  method="POST"
  on:submit|preventDefault
  action="/test"
  use:enhance
>
  <FormInput label="test" id="test" />
  <button type="submit"> Submit </button>
</form>

重要なポイント:

  • use:enhance: このディレクティブは、完全なリロードを行わずに送信を処理できるようにフォームを強化します。また、クライアント側でのエラーや部分的なフォーム更新の処理も簡単になります。
  • on:submit|preventDefault: これにより、ブラウザのデフォルトのフォーム送信動作 (ページのリロード) が防止され、SvelteKit がそれを処理できるようになります。
  • action="/test": フォームは、すぐに作成する /test ルートを指します。名前付きアクション (サインアップなど) を使用している場合、URL は /test?/signup.
  • のようになります。

4. サーバー側アクションの作成

サーバー上でフォームを処理するには、+page.server.js (TypeScript を使用する場合は +page.server.ts) を使用して /test にディレクトリを作成します。

+page.server.js でのフォーム アクションの例を次に示します。

// - /routes/test/+page.server.js
/** @type {import('./$types').Actions} */
export const actions = {
    default: async ({ request }) => {
        const data = await request.formData();
        const formEntries = Object.fromEntries(data.entries()); // Convert form data to an object
        console.log(formEntries); // Log form data on the server
        return {
            success: true,
            message: "Yay!!"
        };
    }
};

重要なポイント:

  • request.formData(): このメソッドは、リクエストから送信されたフォーム データを取得します。
  • Object.fromEntries(data.entries()): これにより、フォーム データがより使いやすいオブジェクト形式に変換されます。各フォーム フィールド名がキーとなり、その値が対応する値になります。

これはサーバーがフォームを処理する場所です。この場合、フォーム データをログに記録し、成功メッセージを返します。実際のシナリオでは、検証を実行してエラーを処理することになるでしょう。


5. フォームの応答を確認する

フォームが送信されると、ターミナル (サーバー側) とブラウザーのコンソール (クライアント側) の両方に記録されたフォーム データが表示されます。これは、コンポーネントの console.log(form) と +page.server.js の console.log(formEntries) のおかげで、フォームの応答とフォームをそれぞれ記録します。


結論

これで、サーバー側のフォーム アクションにデータを送信するフォームが SvelteKit コンポーネント内に作成されました。フォームにページ全体を使用する必要はなく、SvelteKit の use:enhance を利用して、ページをリロードすることなく送信をシームレスに処理しました。

カスタム検証を追加したり、エラーを処理したり、ファイルのアップロードなどのより複雑なアクションを実行したりすることで、これを拡張できます。


ハッピーハッキング!

以上がコンポーネントから SvelteKit フォーム アクションを呼び出す (またはフォームを送信する)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

QWIK:インスタントロードWebアプリの再開可能なフレームワーク QWIK:インスタントロードWebアプリの再開可能なフレームワーク Aug 15, 2025 am 08:25 AM

qwikachievesintantloadingbydefaultroughresumability、nothydration:1)theserverrendershtmlwithserializedstateandpre-mappeventlisteners;

JavaScriptのDOMを使用してHTML要素にアクセスして変更する方法 JavaScriptのDOMを使用してHTML要素にアクセスして変更する方法 Aug 16, 2025 am 11:25 AM

toaccessandModifyHtmLelementSusingJavaScript、firstSelectTheElementusingMethodslikedocument.getElementByid、document.QuerySelector、ordocument.QuerySelectorAll、TheralteritsContent、属性、Orstyles;

jQueryポップアップウィンドウでの動的外部リンクジャンプのイベント処理を最適化する jQueryポップアップウィンドウでの動的外部リンクジャンプのイベント処理を最適化する Sep 01, 2025 am 11:48 AM

この記事の目的は、jQueryポップアップウィンドウで外部リンクリダイレクトボタンをリダイレクトする問題を解決することを解決することを目的としています。ユーザーが複数の外部リンクを連続してクリックすると、ポップアップのジャンプボタンは常に最初のクリックリンクを指す場合があります。コアソリューションは、オフ(「クリック」)メソッドを使用して、新しいイベントの各バインディングの前に古いイベントハンドラーを元に戻し、ジャンプ動作が常に最新のターゲットURLを指すようにし、正確で制御可能なリンクリダイレクトを実現することです。

JavaScriptマルチコンディションフィルタリング:および/またはロジックに基づいて動的製品フィルタリングを実装する JavaScriptマルチコンディションフィルタリング:および/またはロジックに基づいて動的製品フィルタリングを実装する Aug 22, 2025 am 10:00 AM

このチュートリアルでは、JavaScriptを使用してマルチコンディショナルの動的フィルタリング関数を実装する方法を詳細に紹介し、ユーザーが色やサイズなどの複数の属性に基づいて製品をフィルタリングできるようにします。明確なHTML構造とJavaScriptコードの例を通じて、この記事は、複雑なユーザーフィルタリングのニーズを満たすために柔軟に処理する方法とロジックを示し、最適化の提案を提供します。

営業日と労働時間ごとに実行されるJavaScriptカウンターをビルドする 営業日と労働時間ごとに実行されるJavaScriptカウンターをビルドする Aug 31, 2025 am 06:30 AM

この記事では、JavaScriptを使用して正確なタイミングカウンターを構築する方法について詳しく説明します。カウンターは1分に1回増加しますが、プリセットの営業日(月曜日から金曜日)および労働時間(午前6時から午後8時など)内でのみ走ります。非稼働時間中に増分を一時停止できますが、現在の値を表示し、毎月初日に自動的にリセットして、カウントロジックの正確性と柔軟性を確保します。

JavaScriptのデータ属性によってどのように要素を選択しますか? JavaScriptのデータ属性によってどのように要素を選択しますか? Aug 30, 2025 am 01:57 AM

これを実現するには、css属性セレクターを介してjavascriptのデータ属性を持つ要素を選択し、document.queryselector()またはdocument.queryselectorall()メソッドを使用できます。 1. [データアトリブ]を使用して、指定されたデータ属性(任意の値)を持つ要素を選択します。 2。[data-attribute = "value"]を使用して、属性値が正確に一致する要素を選択します。 3。data-user-idがdataset.useridに対応する場合、element.datasetを介してデータ属性にアクセスします(置き換えます

Pytest and Selenium:動的なデータ駆動型テストのための実装戦略 Pytest and Selenium:動的なデータ駆動型テストのための実装戦略 Aug 30, 2025 am 06:00 AM

この記事の目的は、 @pytest.mark.mark.parametrizeデコレーターが、動的なデータ駆動型テストにpytestとセレンを使用するときに実行時に生成されたデータを直接処理できないという問題を解決することを目的としています。 pytest.mark.mark.parametrizeの制限を詳細に調査し、Pytestのpytest_generate_testsフック機能を介したSelenium動的データ収集に基づいてパラメーター化されたテストを優雅に実装する方法を詳細に紹介し、テストケースの柔軟性と効率を確保します。

反応状態管理における一般的な落とし穴とそれらを避ける方法 反応状態管理における一般的な落とし穴とそれらを避ける方法 Aug 17, 2025 am 02:36 AM

状態を直接変更すると、再レンダリングが失敗し、新しいオブジェクトを作成して状態を常に更新する必要があります。 2。閉鎖は時代遅れの状態値をキャプチャする場合があり、機能的な更新または参照を使用して最新の値を取得する必要があります。 3。コンテキストの乱用は不必要な再レンダリングを引き起こし、コンテキストをドメインごとに分割するか、特別な状態管理ライブラリを使用する必要があります。 4.状態は最近の共通の祖先コンポーネントに適切に配置する必要があり、必要に応じてカスタムフックカプセル化ロジックを使用する必要があります。 5.派生状態は州に保存されるべきではありませんが、レンダリング中にパフォーマンスを最適化するために計算または使用する必要があります。 6.還元剤または外部ライブラリの導入は複雑さを高め、状態ロジックが単純な場合は優先順位を与える必要があります。

See all articles