苗条的返回无效的数组长度

svelte returning invalid array length

我有一个 api 可以成功地从 mongodb 中检索到一个集合。 console.log(posts) 显示了 post 的预期数组。

用 for {each} 遍历数组 returns 一个错误

Home.svelte:90 Uncaught (in promise) RangeError: Invalid array length

我错过了什么?为什么每 post 一张卡都没有退回?

感谢您的帮助。

<script>
  import { onMount } from "svelte";

  const apiBaseUrl = "http://localhost:5100/api";

  onMount(async () => {
    const res = await fetch(apiBaseUrl + "/list");
    posts = await res.json();
    console.log(posts)
  });

</script>

<div class="row">
    {#each posts as post}
      <div class="col s6">
        <div class="card">
          <div class="card-content">
            <p class="card-title">{post.title}</p>
            <p>{post.body}</p>
          </div>
        </div>
      </div>
    {/each}
</div>

问题是您在 Svelte 呈现组件时没有定义 posts。当你 API 调用是异步帖子时,each 块运行时将未定义。

您所要做的就是在主脚本块的某处定义 posts:

let posts = [] // <- an empty array

然后在获取后它将重新呈现您的 API 个帖子。

这是一个 working demo in the REPL 注意:我不得不稍微更改你的代码,因为我使用的 API 与你本地的结构不同。

您还可以查看 #await,它可以让 Svelte 处理异步代码。然而,这并不适用于所有异步问题。我两种方法都用。

TIP: You don't need to wrap your onMount function call. Svelte will only fetch your posts once.