等待 Block/Promise/Fetch 将 JSON 数据传递给 Svelte 组件
Await Block/Promise/Fetch for passing JSON data to Svelte component
Svelte 中的 {{#await}} 块在这一点上是相当新的,所以这个用例可能还不是可以使用这种方法实现的。
我试图将 url(JSON 文件的位置)作为 属性 传递给组件,并在组件本身的承诺中获取它,好处是我可以利用 {{#await}} 块来处理组件内的状态。
该组件正在更大的组件中使用,如下所示:
<Showcase dataUrl="/js/showcase.json" />
在 Showcase 组件中,我将 Promise 用作 属性(参见 Svelte 文档 here)以使用 {{#await}} 块为组件提供状态。
export default {
data() {
return {
showcaseData: new Promise(fulfil => fetch(dataUrl)
.then(res => res.json())
.then(data => ({
data: data.assets
}))
.then(res => {
fulfil(res.data)
})
)
}
}
}
问题是我无法在 Promise 中获取 dataUrl
属性。 (我可以吗?)
我认为实现此行为的另一种方法是在观察者中包装承诺(Rich Harris 建议 here)。但是,如果确实有一种方法可以访问 dataUrl
,那么不使用 {{#await}} 似乎是一种耻辱,因为这(理论上)是处理 [=16= 设置的最简洁的方法] 加载组件时。
任何人都可以看到这可能的方法吗?
您可以使用从 dataUrl
:
派生的 computed
属性
<script>
export default {
computed: {
showcaseData: showcaseUrl => {
return fetch(dataUrl)
.then(res => res.json())
.then(data => data.assets);
}
}
};
</script>
(请注意,由于 fetch
已经 returns 一个 Promise,我们不需要将其包装在一个新的 Promise 中并调用 fulfil
。)
此处演示:https://svelte.technology/repl?version=1.56.0&gist=24fc0d0fb6ee9b73c736018ab4a00fe6
Svelte 中的 {{#await}} 块在这一点上是相当新的,所以这个用例可能还不是可以使用这种方法实现的。
我试图将 url(JSON 文件的位置)作为 属性 传递给组件,并在组件本身的承诺中获取它,好处是我可以利用 {{#await}} 块来处理组件内的状态。
该组件正在更大的组件中使用,如下所示:
<Showcase dataUrl="/js/showcase.json" />
在 Showcase 组件中,我将 Promise 用作 属性(参见 Svelte 文档 here)以使用 {{#await}} 块为组件提供状态。
export default {
data() {
return {
showcaseData: new Promise(fulfil => fetch(dataUrl)
.then(res => res.json())
.then(data => ({
data: data.assets
}))
.then(res => {
fulfil(res.data)
})
)
}
}
}
问题是我无法在 Promise 中获取 dataUrl
属性。 (我可以吗?)
我认为实现此行为的另一种方法是在观察者中包装承诺(Rich Harris 建议 here)。但是,如果确实有一种方法可以访问 dataUrl
,那么不使用 {{#await}} 似乎是一种耻辱,因为这(理论上)是处理 [=16= 设置的最简洁的方法] 加载组件时。
任何人都可以看到这可能的方法吗?
您可以使用从 dataUrl
:
computed
属性
<script>
export default {
computed: {
showcaseData: showcaseUrl => {
return fetch(dataUrl)
.then(res => res.json())
.then(data => data.assets);
}
}
};
</script>
(请注意,由于 fetch
已经 returns 一个 Promise,我们不需要将其包装在一个新的 Promise 中并调用 fulfil
。)
此处演示:https://svelte.technology/repl?version=1.56.0&gist=24fc0d0fb6ee9b73c736018ab4a00fe6