Maison > interface Web > tutoriel CSS > Début avec sveltekit

Début avec sveltekit

Lisa Kudrow
Libérer: 2025-03-09 10:42:14
original
452 Les gens l'ont consulté

Getting Started With SvelteKit

sveltekit est un représentant de la nouvelle génération de cadres d'application. Il créera bien sûr des applications pour vous, y compris le routage basé sur les fichiers, le déploiement et le rendu côté serveur que la prochaine a toujours fourni. Mais Sveltekit prend également en charge les dispositions imbriquées, les mutations côté serveur des données de page synchronisées et d'autres fonctionnalités que nous introduirons bientôt.

Cet article vise à donner un aperçu de haut niveau de Sveltekit, dans l'espoir d'inspirer l'intérêt de quiconque n'a jamais utilisé Sveltekit. Ce sera un voyage facile. Si vous aimez ce que vous voyez, la documentation complète est ici.

À certains égards, écrire cet article est difficile. Sveltekit est un framework d'application . Il existe pour vous aider à créer ... des applications. Cela rend la démonstration difficile. La construction d'une application entière dans un article de blog n'est pas possible. Nous utiliserons donc un peu notre imagination. Nous allons construire le squelette de l'application, en utilisant des espaces réservés d'interface utilisateur vides et des données statiques à code dur. L'objectif n'est pas de créer une application réelle, mais de vous montrer le mécanisme de fonctionnement de Sveltekit afin que vous puissiez créer votre propre application. Pour ce faire, nous créerons une application à faire testée et testée à titre d'exemple. Mais ne vous inquiétez pas, cela se concentrera davantage sur le fonctionnement de Sveltekit que de créer une autre application à faire.

Tout le code de cet article peut être trouvé sur GitHub. Ce projet a également été déployé sur Vercel pour des démonstrations en temps réel.

Créer un projet

Il est très facile de démarrer un nouveau projet Sveltekit. Exécutez

NPM Créez svelte @ Dernier Your-App-Name dans le terminal et répondez aux conseils de question. Assurez-vous de sélectionner "Skeleton Project", mais pour TypeScript, Eslint, etc., vous pouvez faire n'importe quel choix si vous le souhaitez.<https:> <p> Une fois le projet créé, exécutez <code> npm i <https:> et <code> npm run dev <https:>, et le serveur de développement devrait commencer à fonctionner. Lancez <code> localhost: 5173 <https:> dans votre navigateur et vous obtiendrez la page d'espace réservé pour l'application Skeleton. <https:> <h3> Route de base <https:> <p> Veuillez noter le dossier <code> Routes <https:> sous <code> src <https:>. Il contient le code pour tous nos itinéraires. Il y a déjà un fichier <code> page.svelte <https:> qui contient le contenu du root <code> https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 <https:> route. Peu importe où vous êtes dans la hiérarchie de fichiers, la page réelle de ce chemin est toujours nommée <code> page.svelte <https:>. Dans cet esprit, allons-y <code> https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list <https:>, <code> https://www.php.cn/link/29a9f8c8460e5e2be4edde557f83712DET . et <https:> https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712adminhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712paid-stat <https:> Votre disposition de fichiers doit ressembler à ceci: <code> <https:> Vous devriez être en mesure de naviguer en modifiant le chemin d'accès à la barre d'adresse du navigateur. <https:> <p> Layout <https:> <p> Nous voulons ajouter des liens de navigation à notre application, mais nous ne voulons certainement pas que leurs balises soient copiées sur chaque page que nous créons. Créons donc un fichier <https:> Layout.svelte <h3> dans la racine du dossier <https:> Routes <p>, que Sveltekit traitera comme un modèle global pour toutes les pages.Ajoutons-y du contenu: <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; liste de tâches &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; Statut du compte &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; Paramètres utilisateur &lt;https:&gt; &lt;https:&gt; &lt;https:&gt; &lt;https:&gt; &lt;slot&gt; &lt;https:&gt; &lt;style&gt; nav { Color en arrière-plan: beige; } nav ul { Affichage: flex; } li { Style de liste: aucun; marge: 15px; } un { Décoration du texte: aucune; Couleur: noir; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; une navigation de base et quelques styles de base. Ce qui est particulièrement important, c'est la balise &lt;code&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. Ce n'est pas la fente que vous utilisez avec les composants Web et l'ombre DOM, mais une fonctionnalité de Svelte qui indique où notre contenu est placé. Lorsque la page est rendue, le contenu de la page glissera dans l'emplacement où se trouve la fente. &lt;em&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt; Maintenant, nous avons une navigation! Nous ne gagnerons aucune compétition de conception, mais nous n'avons pas essayé de le faire non plus. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Disposition imbriquée &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt; Et si nous voulons que toutes les pages de gestion héritent de la disposition normale que nous venons de construire et partagent également certains points communs de toutes les pages de gestion (mais uniquement des pages de gestion)? Pas de problème, nous ajoutons un autre &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; Layout.svelte &lt;p&gt; au répertoire root &lt;code&gt; admin &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; et il sera hérité de tout ce qui est en dessous.Faisons ceci et ajoutons ceci: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;div&gt; Il s'agit d'une page d'administration &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712div&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; &lt;style&gt; div { rembourrage: 15px; marge: 10px 0; Color d'arrière-plan: rouge; Couleur: blanc; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; Nous ajoutons une bannière rouge indiquant qu'il s'agit d'une page d'administration, puis, comme auparavant, un &lt;code&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; indique où nous voulons que le contenu de la page se déroule. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; Notre disposition racine précédente sera rendu. Il y a une balise &lt;p&gt; &lt;code&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; dans la disposition racine. Le contenu de la disposition imbriquée entre dans la disposition racine &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;code&gt; &lt;slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt;. Enfin, la mise en page imbriquée définit son propre &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &lt;code&gt; &lt;slot&gt; où le contenu de la page sera rendu. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712slot&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; Si vous accédez à la page d'administration, vous devriez voir une nouvelle bannière rouge: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; définir les données &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt; D'accord, rendons quelques données réelles - ou du moins voyons comment nous rendons certaines données réelles. Il existe de nombreuses façons de créer et de se connecter à une base de données. Ce message concerne Sveltekit, sans gérer DynamoDB, nous allons donc «charger» certaines données statiques. Cependant, nous utiliserons le même mécanisme que vous utilisez pour les données réelles pour les lire et les mettre à jour. Pour les applications Web réelles, remplacez la fonction qui renvoie les données statiques par la fonction qui connecte et interroge toute base de données que vous utilisez. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt;Let's create a very simple module in &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt;libhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712todoData.ts&lt;p&gt; which returns some static data along with manual delays to simulate the actual query. Vous verrez ce dossier &lt;code&gt; lib &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; importé ailleurs via &lt;code&gt; $ lib &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. C'est ce que Sveltekit fournit ce dossier spécifique, et vous pouvez même ajouter votre propre alias.&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; Soit Todos = [ ot {id: 2, titre: &quot;Écrire un article de blog de chargement de chargement de données avancées Sveltekit&quot;, attribué: &quot;Adam&quot;, tags: [1]}, {id: 3, titre: &quot;Préparez le discours de renom {id: 4, titre: &quot;Correction de tous les bogues sveltekit&quot;, attribué: &quot;riche&quot;, tags: [3]}, {id: 5, titre: &quot;Modifier les articles de blog d'Adam&quot;, attribué: &quot;Geoff&quot;, tags: [4]}, ]] Laissez les tags = [ {id: 1, nom: &quot;contenu sveltekit&quot;, couleur: &quot;ded&quot;}, {id: 2, nom: &quot;conférences&quot;, couleur: &quot;violet&quot;}, {id: 3, nom: &quot;Sveltekit Development&quot;, couleur: &quot;rose&quot;}, {id: 4, nom: &quot;CSS-Tricks Admin&quot;, couleur: &quot;bleu&quot;}, ]] Export const wait = async (montant) = &amp; gt; Nouvelle promesse ((res) = &amp; gt; setTimeout (res, montant ?? 100)); Exporter la fonction asynchrone getTodos () { attendre wait (); retourner todos; } Exporter la fonction asynchrone getTags () { attendre wait (); return tags.reduce ((recherche, tag) = &amp; gt; { Lookup [tag.id] = tag; RETOUR Lookup; }, {}); } Exporter la fonction asynchrone getTodo (id) { return todos.find ((t) = &amp; gt; t.id == id); } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; 一个函数返回我们待办事项的扁平数组、我们的标签的查找以及获取单个待办事项的函数 (我们将在 我们将在 详细信息 详细信息 页面中使用最后一个函数))。 &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; Liste &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; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; import {getTodos, getTags} &quot;$ libhttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712todata&quot;; Fonction d'exportation charge () { const todos = getTodos (); const tags = getTags (); retour { todos, Tags, }; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; 我们定义了一个 &lt;code&gt; charge () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; 函数 , 它会提取页面所需的数据。请注意 , 我们 &lt;em&gt; 没有 &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt; 等待对我们的 &lt;code&gt; getTodos &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; 和 &lt;code&gt; getTags &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; 异步函数的调用。这样做会创建一个数据加载瀑布 , 因为我们在加载标签之前等待待办事项进入。相反 , 我们从 我们从 &lt;code&gt; LOAD &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; 返回原始 Promesse , sveltekit 会执行必要的等待工作。&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Alors, comment accéder à ces données à partir du composant de page? Sveltekit fournit à notre composant un attribut Data &lt;code&gt; Data &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; avec les données. Nous allons accéder à nos tâches et balises à partir de celui-ci à l'aide des affectations réactives. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Notre composant de la page Liste ressemble maintenant à ceci. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;script&gt; exporter des données de location; $: ({todos, tags} = data); &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712script&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt; tâche &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712th&gt; &lt;th&gt; Tags &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712th&gt; &lt;th&gt; attribué &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) = &amp; gt; tags [id] .name) .join (',')} &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; ème { Texte-aligne: gauche; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712style&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; Cela devrait rendre notre liste de tâches! &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt; Group de mise en page &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt; Avant de passer à la page Détails et aux données mutées, jetons un coup d'œil à une fonctionnalité très intelligente de Sveltekit: &lt;strong&gt; Group de mise en page &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt;. Nous avons vu des dispositions imbriquées pour toutes les pages de gestion, mais que se passe-t-elle si nous voulons partager des dispositions entre les pages arbitraires au même niveau dans le système de fichiers? En particulier, que se passe-t-il si nous voulons simplement partager la mise en page entre notre page de liste et la page Détails? Nous avons déjà une disposition globale à ce niveau. Au lieu de cela, nous pouvons créer un nouveau répertoire, mais le nom doit être placé entre parenthèses, comme suit: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Nous avons maintenant un groupe de mise en page couvrant les pages de liste et détaille. Je l'ai nommé &lt;code&gt; (Todo-Management) &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;, mais vous pouvez le nommer comme vous le souhaitez.Il doit être clair que ce nom &lt;em&gt; n'affectera pas l'URL de la page dans le groupe de mise en page. L'URL restera la même; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt; &lt;code&gt; nous &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; pouvons &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; Ajouter un fichier &lt;p&gt; disposition.svelte &lt;em&gt; et un peu de bannière idiote &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712em&gt; &lt;code&gt; qui dit &quot;Hé, nous parvenons à faire des choses.&quot;Mais faisons quelque chose de plus intéressant. La disposition peut définir la fonction &lt;code&gt; charge () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; pour fournir des données pour toutes les routes sous elle. Utilisons cette fonctionnalité pour charger nos balises - car nous utiliserons nos balises dans la page Détails - et la page de liste que nous avons déjà. En fait, il ne vaut certainement pas la peine de forcer le groupe de mise en page juste pour fournir une seule données; Mais pour ce post, il fournira une excuse dont nous avons besoin pour voir de nouvelles fonctionnalités de Sveltekit! &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; Tout d'abord, allons dans le fichier &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; page.server.js &lt;p&gt; de la page de liste et supprimez-le. &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; Import {getTodos} de &quot;$ libhttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahtts: //www.php.cn/link/29a9f8c8460e5e2be4edde557f8371 a &quot;; Fonction d'exportation charge () { const todos = getTodos (); retour { todos, }; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; Notre page de liste devrait désormais produire une erreur car il n'y a pas d'objet &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; Tags &lt;p&gt;. Résolvons ce problème en ajoutant un fichier &lt;code&gt; disposition.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; au groupe de mise en page, puis définissez une fonction &lt;code&gt; charg () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; qui charge les balises. &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; Import {getTags} de &quot;$ libhttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557f8371 a &quot;; Fonction d'exportation charge () { const tags = getTags (); retour { Tags, }; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; De cette façon, notre page de liste a été rendue à nouveau! &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; Nous chargeons des données à partir de plusieurs emplacements &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h4&gt; Concentrons-nous sur ce qui se passe ici: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h4&gt; &lt;p&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; Nous définissons une fonction &lt;ul&gt; charge () &lt;li&gt; pour le groupe de mise en page, et nous la plaçons dans &lt;code&gt; Layout.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. &lt;code&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; Cela fournit des données pour toutes les pages &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; desservant la disposition - dans ce cas, cela signifie nos pages de liste et de détails.&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt; Notre page de liste définit également une fonction &lt;code&gt; Load () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; située dans son fichier &lt;code&gt; page.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt; sveltekit effectue du levage de lourds, fusionnant les résultats de ces sources de données ensemble et fournissant les deux dans &lt;code&gt; data &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; Détails Page &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt; Nous utiliserons la page Détails pour modifier la liste de tâches. Tout d'abord, ajoutons une colonne à la page de liste qui se lie à la page Détails de la chaîne de requête contenant l'ID à tâches. &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; modifier &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712a&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712td&gt; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; Créons maintenant la page Détails. Tout d'abord, nous ajouterons un chargeur pour obtenir l'élément de tâche que nous modifions. Créez un &lt;code&gt; page.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; dans &lt;code&gt; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712details &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; avec le contenu suivant: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; Import {getTodo} de &quot;$ libhttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557f8371 a &quot;; Fonction d'exportation charge ({url}) { const id = url.searchParams.get (&quot;id&quot;); const todo = getTodo (id); retour { faire, }; } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; Notre chargeur est livré avec l'attribut &lt;code&gt; url &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; à partir de laquelle nous pouvons extraire les valeurs de chaîne de requête. Cela facilite la recherche de la liste de tâches que nous modifions. Rendons la tâche et modifions sa fonction. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; sveltekit a une excellente mutabilité intégrée tant que vous utilisez le formulaire. Vous vous souvenez du formulaire? Voici notre page de détails. Pour plus de simplicité, j'ai omis des styles.&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; &lt;script&gt; import {améliorer} de &quot;$ apphttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712forms&quot;; exporter des données de location; $: ({todo, tags} = data); $: currenttags = todo.tags.map ((id) = &amp; gt; tags [id]); &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712script&gt; &lt;div&gt; {#each currentTags comme tag} {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; Enregistrer &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; Nous obtenons l'étiquette du chargeur du groupe de mise en page comme avant et les éléments de tâche du chargeur de la page. Nous obtenons l'objet TAG réel à partir de la liste TAIT des ID de balise, puis rendons tout. Nous créons un formulaire avec une entrée d'ID masquée et une entrée de titre réelle. Nous affichons l'étiquette, puis fournissons un bouton pour soumettre le formulaire. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Si vous remarquez &lt;code&gt; utiliser: améliorer &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;, il s'agit simplement de dire à Sveltekit d'utiliser une amélioration progressive et un AJAX pour soumettre notre formulaire. Vous pouvez toujours l'utiliser. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h4&gt; Comment pouvons-nous enregistrer nos modifications? &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h4&gt; &lt;p&gt; Remarquez le &lt;code&gt; action = &quot;? Https: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712ettodo&quot; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; attribut sur le formulaire lui-même? Cela nous indique où nous voulons soumettre les données modifiées. Pour notre cas, nous voulons nous soumettre à une &lt;code&gt; edittodo &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; &quot;action&quot;.&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Créons-le en ajoutant les éléments suivants au fichier &lt;code&gt; page.server.js &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; que nous fournissons déjà pour &quot;les détails&quot; (le fichier a actuellement une fonction &lt;code&gt; charger () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; pour obtenir nos éléments de tâche): &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; import {redirect} depuis &quot;@sveltejshttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712kit&quot;; import {updateTodo, attendre} de &quot;$ libhttps: //www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712datahtts: //www.php.cn/link/29a9f8c8460e5e2be4edde57f8371 &quot; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 ... Exportation const actions = { async edittodo ({request}) { const formData = attendre request.formData (); const id = formData.get (&quot;id&quot;); const NewTitle = formData.get (&quot;Title&quot;); attendre l'attente (250); attendre updateTodo (id, newtitle); Throw Redirect (303, &quot;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list&quot;); }, }; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; L'action &lt;p&gt; Form nous fournit un objet &lt;code&gt; request &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; qui donne accès à notre &lt;code&gt; formdata &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; qui a une méthode &lt;code&gt; get &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; pour nos différents champs de formulaire. Nous avons ajouté une entrée de valeur d'ID masquée afin que nous puissions l'obtenir ici pour trouver les tâches que nous modifions. Nous simulons le retard, appelons la nouvelle méthode &lt;code&gt; updateToDo () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; et redirigez l'utilisateur vers le &lt;code&gt; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; page. La méthode &lt;code&gt; updateToDo () &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; met simplement à jour nos données statiques; &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;pre class=&quot;brush:php;toolbar:false&quot;&gt; Exportation de la fonction asynchrone UpdateTodo (id, newTitle) { const todo = todos.find ((t) = &amp; gt; t.id == id); Object.assign (toDo, {title: newTitle}); } &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712pre&gt; &lt;p&gt; essayons-le. Nous allons d'abord sur la page de la liste: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Maintenant, cliquez sur le bouton Modifier pour l'un des éléments de tâche pour afficher la page d'édition dans &lt;code&gt; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712details &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;.&lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Nous ajouterons un nouveau titre: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Maintenant, cliquez sur Enregistrer.Cela devrait nous ramener au &lt;code&gt; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt; et appliquer le nouveau titre à faire. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Comment le nouveau titre est-il apparu? C'est automatique. Une fois que nous avons redirigé vers le &lt;code&gt; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712list &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;, sveltekit réduira automatiquement tous nos chargeurs comme d'habitude. Il s'agit d'un progrès clé que les cadres d'application de nouvelle génération comme Sveltekit, Remix et les 13 prochaines offres. Au lieu de vous donner un moyen pratique de rendre des pages, puis bonne chance pour obtenir des points de terminaison dont vous avez peut-être besoin pour mettre à jour vos données, ils intègrent la mutation de données au chargement des données, permettant aux deux de travailler ensemble. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; certaines choses que vous voudrez peut-être savoir ... &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; &lt;strong&gt; Cette mise à jour de mutation ne semble pas trop impressionnante. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt; Le chargeur fonctionnera à nouveau pendant que vous naviguerez. Que se passe-t-il si nous n'ajoutons pas de redirection dans l'action du formulaire, mais que nous restions plutôt sur la page actuelle? Sveltekit effectuera des mises à jour dans les opérations de formulaire comme précédemment, mais réduira toujours tous les chargeurs pour la page actuelle, y compris celles de la mise en page de la page. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; &lt;strong&gt; Pouvons-nous avoir un moyen plus ciblé d'invalider nos données? &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt; Par exemple, nos balises ne sont pas modifiées, donc dans la vraie vie, nous ne voulons pas les remettre en place. Oui, tout ce que je vous montre, c'est le comportement de formulaire par défaut dans sveltekit. Vous pouvez désactiver le comportement par défaut en fournissant un rappel à &lt;code&gt; utiliser: améliorer &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. Sveltekit fournit ensuite une fonction de défaillance manuelle. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; &lt;strong&gt; Le chargement des données à chaque fois que vous naviguez peut être coûteux et inutile. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712strong&gt; Puis-je mettre en cache ces données comme un outil comme React-Queery? Oui, c'est juste différent. Sveltekit vous permet de définir (puis de respecter) des en-têtes de contrôle de cache que le Web a fourni. Je présenterai le mécanisme de défaillance du cache dans un article ultérieur. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Nous utilisons des données statiques tout au long de l'article et modifions les valeurs en mémoire. Si vous devez tout restaurer et recommencer, arrêtez et redémarrez le processus de nœud &lt;code&gt; NPM Run Dev &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712code&gt;. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;h3&gt; Résumé &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712h3&gt; &lt;p&gt; Nous venons de toucher la surface de Sveltekit, mais j'espère que vous avez vu quelque chose qui suffit pour vous exciter.Je ne me souviens pas de la dernière fois que j'ai trouvé le développement Web si intéressant. Avec des fonctionnalités prêtes à l'emploi comme le regroupement, le routage, le SSR et le déploiement, je peux passer plus de temps à coder que la configuration. &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;p&gt; Voici quelques ressources supplémentaires que vous pouvez utiliser comme les prochaines étapes pour apprendre Sveltekit: &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712p&gt; &lt;ul&gt; &lt;li&gt; annoncé Sveltekit 1.0 (blog svelte) &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt; Sveltekit Débutant (Vercel) &lt;https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712li&gt; &lt;li&gt; Sveltekit Documentation &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">Copier après la connexion</div></div></https:></p></https:> </h3></https:></p></https:></p></https:></https:>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal