如何在非页面的 SvelteKit 组件中获取数据

克利夫顿实验室

SvelteKit v1.0.0-next.324

我有一个 SvelteKit 组件,它在我的应用程序的多个地方使用,它需要从我的一个端点获取自己的数据。

我读了这个问题load,指出除非它是一个页面,否则我不能拥有一个功能。假设我无法将其设为一个页面并将其导入另一个页面,我需要能够自行将数据提取到该组件中。

<script lang="ts">
import { onMount } from 'svelte'
import type { Aircraft } from '$lib/models'
  
let aircrafts: Aircraft[]

onMount(async() => {
  aircrafts = await (await fetch('/aircrafts')).json()
  console.log(aircrafts) //<-- This works
})
</script>
  
<p>{aircrafts.length} Aircraft</p> //<-- undefined Aircraft

我的/aircrafts端点返回数据就好了,并且console.log显示了数据。但在我的 HTML 中,aircrafts.length显示undefined Aircraft.

我认为这是因为onMount在设置道具并且数据实际上没有更新之后发生。

如何将数据提取到独立组件中?

托马斯·亨内斯

您的问题是您试图aircrafts.length在数据查询有机会解决之前显示。而且由于不是反应式的,因此当您的承诺最终解决aircrafts时,您的段落不会重新呈现。

解决这个问题的最简洁和最类似 Svelte 的方法是使用{#await}块:

<script lang="ts">
import type { Aircraft } from '$lib/models'
  
let aircrafts: Aircraft[]

async function getAircrafts() {
  const result = await fetch('/aircrafts')
  return result.json()
}
</script>

{#await getAircrafts()}
  <p>Loading aircrafts...</p>
{:then aircrafts}
  <p>{aircrafts.length} Aircraft</p>
{:catch error}
  <p>Error loading aircrafts: {error.message}</p>
{/await}  

请注意,该onMount块是不必要的,因为您不必在获取数据之前等待任何内容被挂载。事实上,您希望尽快开始获取操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在导入的组件中访问 sveltekit 集中的变量?

在 SvelteKit 中刷新当前页面

如何在 SvelteKit 中获取加载功能的用户代理

如何在 SvelteKit 中导入 Material Web 组件?

如何在 SvelteKit 中添加自定义 404 页面和不同的错误页面(针对其他错误)?

在 SvelteKit 中向组件添加类

如何在 SvelteKit 中使用 POST 端点获取结构化对象?

如何在 SvelteKit 中初始化 ApolloClient 以同时在 SSR 和客户端上工作

在组件生命周期之外从 SvelteKit 的 $app/stores 获取值

SvelteKIt - 访问会话 - 调用外部组件的函数

如何将 SvelteKit 获取响应转换为缓冲区?

如何将数据从 sveltekit 路由传递到影子端点 .ts

Sveltekit Todos 示例... 数据存储在哪里?

Sveltekit 无法从 POST formdata 读取数据

从 sveltekit 中的 url 动态导入模块?

SvelteKit 中图像 url 的全局导入

SvelteKit:如何使用基于路由的命名槽

如何使用旧版本的 sveltekit?

如何使用 sveltekit 提供纯 json 文件?

如何更好地获取组件中的数据?

如何从VueJS中的组件获取数据

如何在PHP中获取当前页面的URL

如何在 React Native 中获取页面的滚动值

如何在Android中获取动态页面的html?

如何在JSF中获取当前页面的URL?

如何在加载页面之前获取页面的状态码

如何在每个页面的导航栏中显示数据?

如何在HTML页面中检索PHP页面的内容?

如何在VueJs中获取子组件的数据?