コンポーネントから SvelteKit フォーム アクションを呼び出す (またはフォームを送信する)
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

qwikachievesintantloadingbydefaultroughresumability、nothydration:1)theserverrendershtmlwithserializedstateandpre-mappeventlisteners;

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

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

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

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

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

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

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