メインコンテンツにスキップ

レイアウトデータの紹介で見たように、+page.svelteおよび+layout.svelteコンポーネントは、親のload関数から返されたすべてのものにアクセスできます。

load関数自体が親からのデータにアクセスできると便利な場合があります。これはawait parent()で実行できます。

どのように動作するかを示すために、異なるload関数から取得した2つの数を合計します。まず、src/routes/+layout.server.jsからデータを返します。

src/routes/+layout.server
export function load() {
	return { a: 1 };
}

次に、src/routes/sum/+layout.jsでそのデータを取得します。

src/routes/sum/+layout
export async function load({ parent }) {
	const { a } = await parent();
	return { b: a + 1 };
}

ユニバーサルload関数は、親のサーバーload関数からデータを取得できることに注意してください。逆は真ではありません。サーバーロード関数は、別のサーバーロード関数からのみ親データを取得できます。

最後に、src/routes/sum/+page.jsで、両方のload関数から親データを取得します。

src/routes/sum/+page
export async function load({ parent }) {
	const { a, b } = await parent();
	return { c: a + b };
}

await parent()を使用するときは、ウォーターフォールを導入しないように注意してください。親データに依存しない他のデータをfetchできる場合は、最初にそれを行ってください。

このページをGitHubで編集

1
2
3
<p>if a = 1 and b = a + 1, what is a + b?</p>
<a href="/sum">show answer</a>