Sveltekitを始めましょう

Lisa Kudrow
リリース: 2025-03-09 10:42:14
オリジナル
452 人が閲覧しました

Getting Started With SvelteKit

Sveltekitは、新世代のアプリケーションフレームワークを代表しています。もちろん、ファイルベースのルーティング、展開、サーバー側のレンダリングなど、次に提供されているサーバー側のレンダリングなど、アプリケーションを構築します。しかし、Sveltekitは、ネストされたレイアウト、同期されたページデータのサーバー側の突然変異、およびすぐに紹介するその他の機能もサポートしています。

この記事は、Sveltekitを使用したことがない人の興味を刺激することを望んで、Sveltekitの高レベルの概要を示すことを目的としています。簡単な旅になります。あなたが見るものが好きなら、完全なドキュメントはこちらです。

いくつかの点で、この記事を書くことは挑戦的です。 Sveltekitはアプリケーションフレームワークです。それはあなたが構築するのを助けるために存在します...アプリ。これにより、デモが難しくなります。ブログ投稿にアプリケーション全体を構築することは実行不可能です。したがって、私たちは想像力を少し使います。空のUIプレースホルダーとハードコーディングされた静的データを使用して、アプリケーションのスケルトンを構築します。目標は、実際のアプリケーションを構築することではなく、Sveltekitの実行中のメカニズムを表示して、独自のアプリケーションを構築できるようにすることです。 これを行うには、例として試行され、テストされたToアプリケーションを構築します。しかし、心配しないでください。これは、Sveltekitが別のTo Doアプリを作成するよりも、どのように機能するかに焦点を当てます。 この記事のすべてのコードは、githubで見つけることができます。このプロジェクトは、リアルタイムデモのためにVercelに展開されています。

プロジェクトを作成します

新しいSveltekitプロジェクトを開始するのは非常に簡単です。

npmを実行しますsvelte@最新のyour-app-name を端末に作成し、質問のヒントに答えます。必ず「Skeleton Project」を選択してくださいが、TypeScript、Eslintなどの場合は、必要に応じて選択できます。 プロジェクトが作成されたら、

npm i および<https:>npm run dev<code>を実行し、開発サーバーの実行を開始する必要があります。起動<https:>localhost:5173<code>ブラウザで、スケルトンアプリケーションのプレースホルダーページを取得します。 <https:> <https:>基本的なルーティング<h3> <src> src <https:>の下の<p>ルート<code>フォルダーに注意してください。すべてのルートのコードが含まれています。ルートの内容を含む<https:> page.svelte<code>ファイルが既にあります。ファイル階層のどこにいても、そのパスの実際のページには常に<https:>page.svelte<code>という名前が付けられています。これを念頭に置いて、しましょう<https:>https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list <code>、<https:>https://www.php.cn/link/29a9f8c8840e5e2be4de57 、<code>https://www.php.cn/link/29a9f8460e5e2be4edde557fd83712adminhttps://www.php.cn/link/29a9f8c8460e5e5e2be4edde57fuss83712usおよび<https:>https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712adminhttps://www.php.cn/link/29a9f8c8460e5e2be4edede57fdectuspatus各ページのテキストプレースホルダー。 <code> <https:>ファイルレイアウトは次のようになります <code>ブラウザのアドレスバーのURLパスを変更することでナビゲートできるはずです。 <https:> <code>レイアウト<https:> <code>アプリにナビゲーションリンクを追加する必要がありますが、作成した各ページにタグをコピーすることは確かにありません。それでは、Sveltekitがすべてのページのグローバルテンプレートとして扱う<https:>ルートのルートで<https:> layout.svelte<p>ファイルを作成しましょう。それにコンテンツを追加しましょう:<https:> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;nav&gt; &lt;ul&gt; &lt;li&gt; &lt;a href=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712&quot;&gt;home&lt;https:&gt; &lt;https:&gt; &lt;li&gt; &lt;a href=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list&quot;&gt;to-doリスト&lt;https:&gt; &lt;https:&gt; &lt;li&gt; &lt;a href=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712adminhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712paid-status&quot;&gt;アカウントステータス&lt;https:&gt; &lt;https:&gt; &lt;li&gt; &lt;a href=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712adminhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712user-settings&quot;&gt;ユーザー設定&lt;https:&gt; &lt;https:&gt; &lt;https:&gt; &lt;https:&gt; &lt;slot&gt;&lt;https:&gt; &lt;style&gt; nav { 背景色:ベージュ; } nav ul { ディスプレイ:Flex; } li { リストスタイル:なし; マージン:15px; } { テキスト装置:なし; 色:黒; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt;いくつかの基本的なナビゲーションといくつかの基本的なスタイル。特に重要なのは、&lt;code&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;タグです。これは、WebコンポーネントとShadow Domで使用するスロットではなく、コンテンツの配置場所を示すSvelteの機能です。ページがレンダリングされると、ページコンテンツがスロットが配置されている場所にスライドします。 &lt;em&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt;ナビゲーションがあります!デザインの競争には勝ちませんが、それもやろうとはしませんでした。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;ネストされたレイアウト&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt;すべての管理ページに、構築したばかりの通常のレイアウトを継承し、すべての管理ページ(ただし管理ページのみ)の共通点を共有したい場合はどうなりますか?問題ありません。別の&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt;layout.svelte&lt;p&gt;をroot&lt;code&gt;admin&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;ディレクトリに追加すると、その下のすべてに継承されます。これをして、これを追加しましょう:&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;&lt;div&gt;これは管理ページ&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712div&gt;です &lt;slot&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; &lt;style&gt; div { パディング:15px; マージン:10px 0; 背景色:赤; 色:白; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt;これが管理ページであることを示す赤いバナーを追加し、以前と同様に、&lt;code&gt; &lt;slot&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt;は、ページのコンテンツをどこに行きたいかを示します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;以前のルートレイアウトがレンダリングされます。ルートレイアウトには&lt;p&gt;&lt;code&gt; &lt;slot&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt;タグがあります。ネストされたレイアウトの内容は、ルートレイアウト&lt;最後に、ネストされたレイアウトは、ページのコンテンツがレンダリングされる独自の&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;code&gt;&lt;slot&gt;を定義します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;管理ページに移動する場合は、新しい赤いバナーが表示されます。 &lt;code&gt;データを定義&lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt;わかりました、実際のデータをレンダリングしましょう。または、少なくとも実際のデータをどのようにレンダリングするかを見てみましょう。データベースを作成して接続する方法はたくさんあります。この投稿は、dynamodbを管理していないSveltekitに関するものなので、代わりにいくつかの静的データを「ロード」します。ただし、実際のデータに使用するのと同じメカニズムを使用して、読み取り、更新します。実際のWebアプリケーションの場合、静的データを返す関数を、使用するデータベースを接続してクエリする関数に置き換えます。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;&lt;p&gt;libhttps://www.php.cn/link/29a9f8c8c8460e5e2be4edde557fd83712datahttps:///www.php.cn/link/29a9f8c8460pde54ded844ded8444ded8444deddathttps odata.ts&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;これは、実際のクエリをシミュレートするために手動の遅延とともにいくつかの静的データを返します。これは、&lt;h3&gt;$ lib&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt;を介して他の場所にインポートされている&lt;p&gt;lib&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;フォルダーが表示されます。これは、Sveltekitがその特定のフォルダーに提供するものであり、独自のエイリアスを追加することもできます。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; todos = [ {id:1、title: &quot;sveltekitイントロブログ投稿を書く&quot;、割り当て: &quot;adam&quot;、tags:[1]}、 {id:2、title: &quot;sveltekit write sveltekit dibanced data loading blog郵便&quot;、assioned: &quot;adam&quot;、tags:[1]}、 {id:3、title: &quot;prepare renderatl talk&quot;、assigned: &quot;adam&quot;、tags:[2]}、 {id:4、title:「すべてのsveltekitバグを修正」、割り当てられた: &quot;rich&quot;、tags:[3]}、 {ID:5、タイトル:「Adamのブログ投稿を編集」、割り当てられた:「Geoff」、タグ:[4]}、 ]; tags = [ {id:1、name: &quot;sveltekit content&quot;、color: &quot;ded&quot;}、 {id:2、name: &quot;Conferences&quot;、color: &quot;purple&quot;}、 {id:3、name: &quot;sveltekit development&quot;、color: &quot;pink&quot;}、 {id:4、name: &quot;css-tricks admin&quot;、color: &quot;blue&quot;}、 ]; エクスポートconst wait = async(nomul)=&gt; New Promise((res)=&gt; setimeout(res、金額?? 100)); async関数をエクスポートgettodos(){ 待ってください(); Todosを返します。 } async関数gettags()をエクスポート{ 待ってください(); return tags.reduce((lookup、tag)=&gt; { lookup [tag.id] = tag; return lookup; }、{}); } async関数gettodo(id)をエクスポートする{ return todos.find((t)=&gt; t.id == id); }&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; 一个函数返回我们待办事项的扁平数组、我们的标签的查找以及获取单个待办事项的函数(我们将在 &quot;详细信息” &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt;加载数据&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt;我们如何将这些数据放入我们的svelte 页面?方法有很多、但现在、让我们在&lt;code&gt;リスト&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;文件夹中创建一个&lt;code&gt; page.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;Import {gettodos、gettags}から&quot;$ libhttps://www.php.cn/link/29a9f8460e5e2be4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460e5e5e5e4ede5557fd83712ta&quot;; export function load(){ const todos = gettodos(); const tags = gettags(); 戻る { トドス、 タグ、 }; }&lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;我们定义了一个&lt;p&gt; load()&lt;code&gt;函数、它会提取页面所需的数据。请注意、我们&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;em&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt;&lt;code&gt;等待对我们的&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;gettodos&lt;code&gt;和&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;gettags &lt;code&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;では、ページコンポーネントからこのデータにどのようにアクセスしますか? Sveltekitは、コンポーネントに&lt;code&gt; data&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;属性をデータとともに提供します。リアクティブな割り当てを使用して、to-dosとタグにアクセスします。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;リストページコンポーネントは次のようになりました。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;&lt;script&gt; データをエクスポートします。 $ :( {todos、tags} = data); &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712script&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;タスク&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712th&gt; &lt;th&gt;タグ&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712th&gt; &lt;th&gt;割り当て&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712th&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712tr&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712thead&gt; &lt;tbody&gt; {#each todos as t} &lt;tr&gt; &lt;td&gt;{t.title} &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712td&gt; &lt;td&gt;{t.tags.map((id)=&gt; tags [id] .name).jein( '、')} &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712td&gt; &lt;td&gt; {t.assigned} &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712td&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712tr&gt; {https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712each} &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712tbody&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712table&gt; &lt;style&gt; th { テキストアライグ:左; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt;これにより、To Doリストが表示されるはずです! &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt;レイアウトグループ&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt;詳細ページと変異したデータに移る前に、Sveltekitの非常に巧妙な機能:&lt;strong&gt;レイアウトグループ&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt;を簡単に見てみましょう。すべての管理ページのネストされたレイアウトを見てきましたが、ファイルシステムの同じレベルで任意のページ間でレイアウトを共有したい場合はどうでしょうか?特に、リストページと詳細ページ間でレイアウトを共有したい場合はどうなりますか?すでにそのレベルでグローバルなレイアウトがあります。代わりに、新しいディレクトリを作成できますが、名前は次のようにブラケットに配置する必要があります。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;リストと詳細ページをカバーするレイアウトグループがあります。私はそれを&lt;p&gt;(todo-management)&lt;code&gt;と名付けましたが、好きなものは何でも名前を付けることができます。この名前がレイアウトグループのページのURLに影響しないことは明らかです。 URLは同じままです。レイアウトグループは、すべてのレイアウトをページに追加できます。 &lt;em&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt;&lt;code&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;レイアウトを追加できます。svelte&lt;p&gt;ファイルと、「ねえ、私たちは何をしているのか」と言っている愚かな&lt;em&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt;バナーです。しかし、もっと面白いことをしましょう。レイアウトは、&lt;code&gt;load()&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;関数を定義して、その下のすべてのルートのデータを提供できます。この機能を使用してタグを読み込みましょう。詳細ページにタグを使用し、リストページを既に使用しています。実際、単一のデータを提供するためだけにレイアウトグループを強制することは、ほぼ確実に価値がありません。しかし、この投稿では、Sveltekitの新機能を見るために必要な言い訳を提供します! &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;最初に、リストページの&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;page.server.js&lt;p&gt;ファイルにアクセスして、そこからタグを削除しましょう。 &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; intorm {gettodos} from &quot;$ libhttps://www.php.cn/link/29a9f8c8460e5e2bbe4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460pde57pde57pdeddedpedpedded ata &quot;; export function load(){ const todos = gettodos(); 戻る { トドス、 }; }&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;リストページは、&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;タグ&lt;p&gt;オブジェクトがないため、エラーが発生するようになりました。この問題を解決して、A &lt;server.server.js&lt;code&gt;ファイルをレイアウトグループに追加し、タグをロードする&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;load()&lt;code&gt;関数を定義します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; 「$ libhttps://www.php.cn/link/29a9f8c8460e5e2bbe4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460pde57pde57pde570e2de54de570pde570pde570pdeddedde5570pde570pttps ata &quot;; export function load(){ const tags = gettags(); 戻る { タグ、 }; }&lt;code&gt; このように、リストページは再びレンダリングされました! &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;複数の場所からデータをロードしています&lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;ここで何が起こっているのかに焦点を当てましょう:&lt;p&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h4&gt;レイアウトグループのa &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h4&gt;load()&lt;p&gt;関数を定義し、&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;layout.server.js&lt;ul&gt;に配置します。 &lt;li&gt; これにより、レイアウトにサービスを提供するすべての&lt;code&gt;ページのデータが提供されます。この場合、これは私たちのリストと詳細ページを意味します。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt;リストページは、&lt;server.js&lt;code&gt;ファイルにある&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; load()&lt;code&gt;関数も定義しています。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt;sveltekitは重い持ち上げを実行し、これらのデータソースの結果を一緒に統合し、両方を&lt;li&gt;データ&lt;code&gt;を提供します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712ul&gt;詳細ページ&lt;h3&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt;詳細ページを使用して、To Doリストを編集します。まず、To-Do IDを含むクエリ文字列の詳細ページにリンクする列をリストページに追加しましょう。 &lt;p&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;&lt;td&gt;編集&lt;a href=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712details?id={t.id}&quot;&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712a&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712td&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;今すぐ詳細ページを作成しましょう。まず、ローダーを追加して、編集しているTo Doアイテムを取得します。 &lt;p&gt; page.server.js&lt;code&gt;in&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712details&lt;code&gt;次のコンテンツ:&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; intorm {gettodo} from &quot;$ libhttps://www.php.cn/link/29a9f8c8460e5e5e2be4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460pde57pdeddedpeddedpeddedpdedpedded ata &quot;; エクスポート関数負荷({url}){ const id = url.searchparams.get( &quot;id&quot;); const todo = gettodo(id); 戻る { トッド、 }; }&lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;私たちのローダーには、クエリの文字列値を抽出できる&lt;p&gt;url&lt;code&gt;属性が付属しています。これにより、編集しているTo Doリストを簡単に見つけることができます。 to-doをレンダリングし、関数を編集しましょう。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;Sveltekitには、フォームを使用する限り、優れた組み込みの可変性があります。フォームを覚えていますか?これが詳細ページです。簡単にするために、スタイルを省略しました。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;&lt;script&gt; 「$ apphttps://www.php.cn/link/29a9f8c8460e5e5e2be4edde557fd83712forms &quot;から{entance}をインポートします。 データをエクスポートします。 $:({todo、tags} = data); $:currenttags = todo.tags.map((id)=&gt; tags [id]); &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712script&gt; &lt;div&gt; {#each currentTagsとしてタグ} {tag.name} {https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712each} &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712div&gt; &lt;form method=&quot;POST&quot; action=&quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712editTodo&quot; use:enhance&gt; &lt;input type=&quot;hidden&quot; name=&quot;id&quot; value={todo.id} https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712&gt; &lt;input type=&quot;text&quot; name=&quot;title&quot; bind:value={todo.title} https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712&gt; &lt;button type=&quot;submit&quot;&gt; save&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712button&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712form&gt;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt;レイアウトグループのローダーから以前のようにラベルと、ページのローダーからTo Doアイテムを取得します。タグIDのto-doリストから実際のタグオブジェクトを取得し、すべてをレンダリングします。非表示のID入力と実際のタイトル入力を備えたフォームを作成します。ラベルを表示し、フォームを送信するボタンを提供します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; &lt;code&gt;使用に気づいた場合:拡張&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;、これはSveltekitにプログレッシブエンハンスメントとAJAXを使用してフォームを送信するように指示するだけです。常に使用できます。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h4&gt;編集をどのように保存しますか? &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h4&gt; &lt;p&gt; &lt;code&gt;action = &quot;?https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712edittodo&quot;&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;フォーム自体の属性?これにより、編集されたデータをどこに送信するかがわかります。私たちのケースでは、&lt;code&gt;edittodo &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &quot;Action&quot;に提出したいと考えています。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;server.server.js&lt;p&gt;ファイルに次のように追加して作成してみましょう(詳細」を既に提供しています(現在、ファイルには&lt;code&gt;load()&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;関数があります。 &lt;sveltejshttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712kit &quot;から&lt;code&gt; import {redirect}から{redirect}。 「$ libhttps://www.php.cn/link/29a9f8c8460e5e2bbe4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460e4de4de2be4de2be4de2de257pdde257pdde257pdde2be4dde2be4dedahtttstpsttsttsttsttsttsttsttps」から{updatodo、wait}をインポートしてくださいa &quot;; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4ede557fd83712 ... constアクションをエクスポート= { async edittodo({request}){ const formdata = await request.formdata(); const id = formdata.get( &quot;id&quot;); const newtitle = formdata.get( &quot;title&quot;); 待っています(250); updateTodo(id、newtitle)を待っています。 スローリダイレクト(303、 &quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list&quot;); }、 }; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; フォームアクションは、さまざまなフォームフィールドに&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; formdata &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;メソッドを備えた&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; formdata&lt;p&gt;へのアクセスを提供する&lt;code&gt;リクエスト&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;オブジェクトを提供します。編集中のTo-Doを見つけるためにここでそれを取得できるように、Hidden ID値入力を追加しました。遅延をシミュレートし、new&lt;code&gt;updateTodo()&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;メソッドを呼び出し、ユーザーを&lt;code&gt;https://www.php.cn/link/29a9f8c8460e5e2bbe4edde557fd83712リスト&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;ページに戻します。 &lt;code&gt;updateTodo()&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;メソッドは、実生活では単純に更新されます。 &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;async関数updateTodo(id、newtitle)をエクスポート{{ const todo = todos.find((t)=&gt; t.id == id); object.Assign(todo、{title:newtitle}); }&lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;試してみましょう。最初にリストページに進みます:&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;次に、To-Doアイテムの1つの編集ボタンをクリックして、&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt;https://www.php.cn/link/link/29a9f8c8460e5e5e2be4edde557fd83712details&lt;p&gt;で編集ページを表示しましょう。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;新しいタイトルを追加します:&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;さあ、[保存]をクリックします。これにより、&lt;code&gt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;ページに戻り、新しいto-doタイトルを適用します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;新しいタイトルはどのように登場しましたか?これは自動です。 &lt;code&gt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;ページにリダイレクトすると、sveltekitはすべてのローダーを通常のように自動的に繰り返します。これは、Sveltekit、Remix、次の13のオファーなどの新世代アプリケーションフレームワークが提供する重要な進歩です。ページをレンダリングする便利な方法を提供する代わりに、データを更新する必要があるエンドポイントを取得することは幸運で、データのロードとデータのロードを統合し、2つを連携させることができます。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;知りたいことがあるかもしれないこと... &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;&lt;strong&gt;この突然変異の更新はそれほど印象的ではないようです。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt;ナビゲート中にローダーが再び実行されます。フォームアクションにリダイレクトを追加せず、代わりに現在のページにとどまるとどうなりますか? Sveltekitは、以前と同様にフォーム操作の更新を実行しますが、ページレイアウトのものを含む現在のページのすべてのローダーを再実行します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;&lt;strong&gt;データを無効にするためのよりターゲットを絞った方法を持つことができますか?たとえば、&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt;タグは編集されていないため、実生活ではそれらを再クエリにしたくありません。はい、私があなたに示しているのは、Sveltekitのデフォルトのフォーム動作だけです。 &lt;code&gt;使用にコールバックを提供することにより、デフォルトの動作をオフにすることができます。 Sveltekitは、手動障害関数を提供します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;&lt;p&gt;ナビゲートするたびにデータを読み込むことは、高価で不要になる可能性があります。 &lt;strong&gt;このデータは、React-Queryのようなツールのようにキャッシュできますか?はい、それはただ違うです。 Sveltekitを使用すると、Webが提供したキャッシュコントロールヘッダーを設定(および尊重)できます。後続の記事でキャッシュ障害メカニズムを紹介します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;記事全体で静的データを使用し、メモリ内の値を変更します。すべてを復元して最初からやり直す必要がある場合は、&lt;p&gt;npm run dev&lt;code&gt;ノードプロセスを停止して再起動します。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;要約&lt;h3&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; Sveltekitの表面に触れましたが、あなたが興奮するのに十分なものを見てきたことを願っています。Web開発がとても面白いと思ったのを最後に覚えていません。バンドリング、ルーティング、SSR、展開など、すぐに使用できる機能を使用すると、構成よりもコーディングに多くの時間を費やすことができます。 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt;以下は、Sveltekitを学ぶための次のステップとして使用できるリソースをいくつかあります:&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;ul&gt; &lt;li&gt;Sveltekit 1.0(Svelte blog)を発表しました&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt;Sveltekit初心者コース(Vercel)&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt;sveltekitドキュメント&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712ul&gt;&lt;/style&gt;&lt;/https:&gt;&lt;/slot&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/a&gt; &lt;/li&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/a&gt; &lt;/li&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/a&gt; &lt;/li&gt;&lt;/https:&gt;&lt;/https:&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;/nav&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div></https:></p></https:></https:>

以上がSveltekitを始めましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート