Svelte3 Sapper: Как сделать обновление родительского макета при обновлении магазина?Можно ли передавать данные между скриптами модуля вложенных макетов? - PullRequest
0 голосов
/ 19 сентября 2019

Я 3 дня в Svelte3 и Sapper, и они такие классные, но я не уверен, что готовлю их правильно.

Мое приложение упрощено:


├── routes
│   ├── _error.svelte
│   ├── _layout.svelte // parent layout (PL)
│   ├── index.svelte
│   ├── catalog
│   │   ├── _layout.svelte // child layout (CL)
│   │   ├── [cat].svelte // first level category (1L)
│   │   ├── [cat]
│   │   │   ├── [subcat].svelte // second level category (2L)

Что происходит:

1) Мой PL содержит меню заголовка, поэтому я запрашиваю данные категорий из его скрипта модуля, используя preload (page, session) и this.fetch.Также я должен сделать некоторую логику там, чтобы я получил данные пути (слизни).Я .set категории и данные о пути в магазине в PL простым сценарием.

2) CL содержит компонент Breadcrumbs.Хлебные крошки берут $ pathData из хранилища (мне нужны эти данные для хранения другой логики).SSR показывает, что логика работает, как и ожидалось.

3) Так как мне нужно менять хлебные крошки при перемещении между страницами каталога, я должен также изменить данные пути в хранилище, чтобы каждый маршрут .svelte имел скрипт модуля с предзагрузкой, возвращающей параметры.В простом сценарии я сохраняю данные пути .update (old => new) в хранилище.

Я ожидал, что хлебные крошки обновятся автоматически после того, как я поменял хранилище, но он обновится, только если я изменю маршрут, т.е. перейду от L1 к L2 илиназад ().Пока я перемещаюсь между категориями одного уровня, хлебные крошки не меняются.

Вопросы:

1) Это правильное поведение или я что-то сломал?Если правильно, как я должен обновить панировочные сухари?Я могу поместить их в L1 и L2, но это кажется логически странным из-за повторения кода.

1.1) Я прочитаю больше о регулярных выражениях в маршрутах - кажется, это способ заменить L1 и L2 .svelte наодин файл - это решает проблему повторения кода.Но в идеале панировочные сухари должны быть помещены в PL, чтобы я мог снова столкнуться с той же проблемой обновления.Я видел https://svelte.dev/docs#bind_element_property и приведенные ниже разделы, но я не могу понять, это мой случай и что и где мне писать.

2) Есть ли способ передать переменные из скрипта модуля PLв скрипт модуля CL?Мне нужно делать или не запрашивать продукты из CL в зависимости от данных категорий, которые я получаю в PL, но хранилище недоступно в модульном скрипте, поэтому теперь я делаю запрос продуктов в случае необходимости в PL (не могу выполнить запрос продуктов в простом скрипте, потому что нужен SSRпродукты).Это кажется странным, потому что запрос товаров явно принадлежит макету каталога (CL) или маршрутам, а не PL!API, с которым я работаю, странный - я знаю, но должен быть способ ...

Обновление:

3) У меня есть красные документы о регулярных выражениях в маршрутах, и я не нашел ответаКак представить все мои каталоги маршрутов как один маршрут.Могу ли я описать маршруты catalog / [cat] и catalog / [cat] / [subcat] как один маршрут?

Я почти уверен, что есть ошибка, но я не могу ее найти.https://bitbucket.org/LittleToky/rerooms-store-svelte/commits/50dde002fe9c8ae91a3276bd9a551a7b26841d3c Если кто-то проверит это: сначала перейдите в / rooms / living / miebiel / miaghkaia-miebiel / и нажмите на разные категории в боковом меню. Смотрите изображение здесь

...