【发布时间】:2020-05-28 18:39:20
【问题描述】:
假设我有一个 blog 路由,可以加载所有博客文章的完整数组。个人博客帖子位于blog/[postId]。是否有一种 Sapper 惯用的方式将单个帖子的数据从 blog 传递到 blog/[postId]?
基本上,如果您使用blog,我想预加载代码以显示blog/[postId]。然后,当您单击指向blog/[postId] 的链接时,立即导航到那里并显示来自blog 的数据。但当然,如果您直接导航到 blog/[postId],则仍应调用 preload()。
prefetch 并没有完全做到这一点,因为这仍然需要网络请求。我还尝试了一个预加载,它检查一个商店,除非它是空的,否则不会发出网络请求,但你不能在<script context="module"> 中使用商店。
【问题讨论】:
-
你可以在你的布局路线中做到这一点。如果它位于您的博客目录中,您可以在其中预加载所有帖子,然后根据每个 ID 显示该数据。但我可能只预加载一个博客 ID,然后在加载后获取所有其他帖子并将它们存储在商店中。
-
感谢您的建议。它让我走上了解决问题的道路。结果发现
preload()总是在导航时被调用,不管它是在_layout.svelte中,还是在常规页面组件中,或者两者兼而有之。我最终将第二个参数中的数据存储到preload()、session,并且只有在它为空或陈旧时才调用this.fetch()。