ルーティング入門で見たように、レイアウトは異なるルート間でUIとデータローディングロジックを共有する方法です。
ルートに影響を与えずにレイアウトを使用すると便利な場合があります。たとえば、/app
と/account
ルートは認証が必要で、/about
ページは一般公開されている必要があるかもしれません。これは、丸括弧で囲まれたディレクトリであるルートグループを使用して行うことができます。
account
を(authed)/account
に、app
を(authed)/app
にリネームして、(authed)
グループを作成します。
次に、src/routes/(authed)/+layout.server.js
を作成して、これらのルートへのアクセスを制御できます。
src/routes/(authed)/+layout.server
import { redirect } from '@sveltejs/kit';
export function load({ cookies, url }) {
if (!cookies.get('logged_in')) {
redirect(303, `/login?redirectTo=${url.pathname}`);
}
}
これらのページにアクセスしようとすると、/login
ルートにリダイレクトされます。このルートには、logged_in
クッキーを設定するsrc/routes/login/+page.server.js
のフォームアクションがあります。
また、src/routes/(authed)/+layout.svelte
ファイルを追加して、これら2つのルートにUIを追加することもできます。
src/routes/(authed)/+layout
<script>
let { children } = $props();
</script>
<form method="POST" action="/logout">
<button>log out</button>
</form>
前へ 次へ
1
2
3
4
<h1>home</h1>
<p>this is the home page.</p>