You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte Native中通过Fetch请求实现列表视图展示问题求助

解决NativeScript中ListView数据渲染卡住的问题

嘿,作为NativeScript新手遇到这种加载一直卡住的情况太正常啦!我帮你排查出了关键问题,咱们来一步步修正:

1. 核心问题:重复遍历导致逻辑冲突

你在<listView>上已经通过items="{data}"绑定了数据源,ListView本身会自动遍历这个数组并为每个项渲染Template。但你又在Template里加了{#each data as item}——这相当于让ListView再嵌套遍历一遍整个数组,直接打乱了渲染逻辑,导致页面一直停在等待状态。

2. 修正后的代码示例

模板部分(Svelte风格)

{#await posts}
  <label text="Waiting"></label>
{:then data}
  <listView items="{data}" row="1" colSpan="2">
    <Template let:item>
      <!-- 直接使用Template传递的item即可,无需额外遍历 -->
      <label text="{item.id}. {item.body}" textWrap="true" />
    </Template>
  </listView>
{:catch err}
  <!-- 增加错误信息展示,方便调试 -->
  <label text="Error occurred: {err.message}" textWrap="true" />
{/await}

脚本部分

async function fetchPosts() {
  try {
    let allPosts = await fetch('https://jsonplaceholder.typicode.com/posts');
    // 新增HTTP状态检查,避免把非成功响应当成有效数据
    if (!allPosts.ok) {
      throw new Error(`请求失败,状态码:${allPosts.status}`);
    }
    return await allPosts.json();
  } catch (err) {
    console.error('获取数据出错:', err);
    // 抛出错误让模板的{:catch}捕获
    throw err;
  }
}

let posts = fetchPosts();

额外说明

  • 去掉多余的{#each}后,ListView会正常遍历data数组,每个项通过let:item传递给Template,直接使用这个变量就能拿到当前项的id和body。
  • 新增的错误检查和捕获能帮你快速定位问题(比如网络问题、API返回异常等),而不是一直卡在等待状态。

内容的提问来源于stack exchange,提问作者Sean Pelser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:08:12