【问题标题】:Passing values from layout to nested child routes in svelte sapper?将值从布局传递到苗条工兵中的嵌套子路由?
【发布时间】:2020-03-05 06:51:47
【问题描述】:

[编辑] 我更新了示例以包括使用预加载 (userb) 和 {#await} (usera)。 /users/[username]/about.svelte中未定义两种场景 usera 和 userb

你将如何让这样的事情发挥作用:

/users/[用户名]/_layout.svelte

{#await promise}
  Loading...
  <slot {usera} {userb}/>
{:then usera}
  { JSON.stringify({usera, userb}) }
  <slot {usera} {userb}/>
{/await}

<script context="module">
    export async function preload(page, session) {
        let userb = await fetchUser(page.params.username)
        return { userb };
    }
</script>

<script>
import { stores } from '@sapper/app'
const { page } = stores();

export let userb;
let usera

async function fetchUser (username) {
  return new Promise(resolve => setTimeout(() => {
    resolve({ username });
  }, 333))
}

let promise = fetchUser($page.params.username)
</script>

/users/[用户名]/about.svelte

{#if usera}
  <span>{usera.username}</span>
{:else}
 NULL USER_A
{/if}

{#if userb}
  <span>{userb.username}</span>
{:else}
 NULL USER_B
{/if}

<script>
export let usera
export let userb

$: console.log({ usera })
$: console.log({ userb })
</script>

似乎 /user/:username/about 没有从 _layout 接收道具用户。这适用于 nuxt(对于 vuejs 而不是 svelte 基本上是 sapper)。

【问题讨论】:

  • 您在布局中使用preload 函数吗?
  • 没有。这是我应该尝试的吗?

标签: svelte sapper svelte-3


【解决方案1】:

我没有看到你的 proload 函数。在https://sapper.svelte.dev/docs#Preloading查看有关预加载的文档@

您的代码中应该有这样的内容。为了在页面呈现之前加载数据,预加载是必要的。只有当你将它包含在带有模块上下文的脚本中时它才有效 (&lt;script context="module"&gt;)

{#await userPromise}
  <p>...waiting</p>
{:then user}
  <slot {user}></slot>
{:catch error}
  <p style="color: red">{error.message}</p>
{/await}

<script context="module">
  export async function preload({ params }) {
    console.log('layout')
    const { username } = params;
    return { username };
  }
</script>

<script>
  function delay(t, v) {
    return new Promise(function(resolve) {
      setTimeout(resolve.bind(null, v), t);
    });
  }
  export let username;
  export let userPromise = fetchUser($page.params.username)
</script>


【讨论】:

  • 我添加了一个预加载功能,但它仍然无法正常工作。
猜你喜欢
  • 2017-05-21
  • 2016-12-08
  • 2018-04-02
  • 1970-01-01
  • 2021-03-12
  • 2020-05-05
  • 2017-10-14
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多