Передача данных между страницами в SvelteKit с помощью goto

Я работаю над проектом SvelteKit, в котором пытаюсь передать данные между двумя страницами с помощью функции перехода. К сожалению, я столкнулся с проблемами и не могу заставить его работать правильно.

Контекст Я хочу передать фиксированное значение («TOTO») с одной страницы на другую, чтобы убедиться, что передача данных работает правильно, прежде чем переходить к ее реализации с динамическими данными (например, идентификатором изображения).

Что я наделал Исходная страница (Gallery.svelte):

<script>
    import { goto } from '$app/navigation';

    const handleClick = () => {
        console.info('Navigating to test value');
        goto('/test/TOTO');
    };
</script>

<div>
    <button on:click = {handleClick}>Go to Test Value</button>
</div>

Страница назначения (src/routes/test/[value]/+page.svelte):

<script context = "module">
    export async function load({ params }) {
        const { value } = params;
        return {
            props: { value }
        };
    }
</script>

<script>
    export let value;
    console.info('Loaded value:', value);
</script>

<div class = "value-display">
    <h1>Passed Value:</h1>
    <p>{value}</p>
</div>

Возникла проблема Когда я нажимаю кнопку «Перейти к тестовому значению» в Gallery.svelte, меня перенаправляют на страницу /test/TOTO, но переданное значение (значение) не определено.

Что я проверил Структура файла: src/routes/test/[value]/+page.svelte размещен правильно. Консоль показывает значение «Загружено: неопределенное».

Дополнительная информация Версия SvelteKit: 2.0.0

Вопрос Может ли кто-нибудь помочь мне понять, почему значение, передаваемое через goto, не определено и как это исправить? Любая помощь будет принята с благодарностью!

Спасибо заранее за вашу помощь!

🤔 А знаете ли вы, что...
JavaScript используется для разработки современных одностраничных приложений (SPA), где весь контент загружается асинхронно.


1
69
1

Ответ:

Решено

Начиная с версии SvelteKit 1.0+, загрузка данных страницы больше не осуществляется через раздел <script context = "module">, а через сопутствующий раздел +page.js (или +page.ts, если вы используете Typescript), как описано в соответствующей документации.

Вы также можете указать, что этот механизм должен работать только на стороне сервера, вместо этого разместив функцию загрузки внутри +page.server.js (или, опять же, .ts).

В вашем конкретном случае:

// src/routes/test/[value]/+page.js

export const load = ({ params }) => {
    const { value } = params;
    return {  // the 'props' property is no longer necessary
        value
    };
};

и

// src/routes/test/[value]/+page.svelte

<script>
    export let data; // will contain the object returned by the load function
    console.info('Loaded value:', data.value);
</script>

<div class = "value-display">
    <h1>Passed Value:</h1>
    <p>{data.value}</p>
</div>

Примечание: на странице галереи вам действительно следует использовать динамически генерируемые ссылки (например, с помощью экстраполяции строк) для навигации, а не через обработчик кнопок, который впоследствии вызывает действие goto, например:

<script>
    const id = 'TOTO';
</script>

<div>
    <a href = {`/test/${id}`}>Go to Test Value</a>
</div>