【问题标题】:Rendering nested objects in Svelte在 Svelte 中渲染嵌套对象
【发布时间】:2021-02-26 15:41:23
【问题描述】:

JSON 文件如下所示。你可以在https://api.mocki.io/v1/0f83a2e7找到整个 JSON 文件

  {
          "rows": [
            {
              "key": [
                "0x1d42",
                {
                  "x": 10.32,
                  "y": 11.13,
                  "z": 1.22
                }
              ],
              "value": {
                "pos": {
                  "x": 10.32,
                  "y": 11.13,
                  "z": 1.22
                },
                "id16": "0x1d42",
                "resultTime": "2021-02-21T23:28:03.558Z"
              }
            },
           .......
        ]}

我想提取 values.pos, values。 id16,values.resultime。 我尝试了下面的代码,但它没有给我任何结果。

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

    const apiURL = "https://api.mocki.io/v1/0f83a2e7";
    let data = [];
     onMount(async function() {
        const response = await fetch(apiURL);
        data = await response.json();
    });
</script>

<pre>
<div>
{#each data.rows as row }
                        <div>
                        {#each row.value as value}
                <p> {value.pos} </p>
                        {/each}
            </div>                      
 {/each}
</div>  
</pre>

如何提取这些值以便在表格中显示它们?

【问题讨论】:

    标签: javascript svelte-3


    【解决方案1】:

    首先要注意的是,在 Svelte 中,onMount 是在 第一次呈现标记之后执行的(在onMount 期间它当然可以更新)这意味着组件的初始状态必须能够毫无问题地呈现,但事实并非如此。

    您尝试迭代 data.rows 但此属性最初不存在,您可以通过使用属性行初始化数据来解决此问题:let data = { rows: [] }

    然后你尝试遍历value,但是value不是一个数组,所以它不能循环遍历它。

    value.pos 也是一个对象 (x,y,z),所以当它最终渲染时,它只会在输出中显示 [Object object]

    您只需直接指向它们即可提取这些值:&lt;p&gt;{row.value.pos.x}&lt;/p&gt;

    (您在这里尝试做什么并不完全清楚。)

    也就是说,您可以使用 await block 使代码更简单

    <script>
      const apiURL = "https://api.mocki.io/v1/0f83a2e7";
      const load = url => fetch(url).then(res => res.json());
    </script>
    
    {#await load(apiURL) then data}
      <pre>
        <div>
          {#each data.rows as row }
            <div>
              <p>{row.value.pos.x}</p>
              <p>{row.value.pos.y}</p>
              <p>{row.value.pos.z}</p>
            </div>                      
          {/each}
        </div>  
      </pre>
    {/await}
    

    使用此代码,您将等待渲染,直到收到回复,并且您知道 data 将始终具有正确的格式

    【讨论】:

    • 我还有一个问题。如何将这些 {row.value.pos.x} {row.value.pos.y} 值放入数组中。我想要这样的数组[{x:row.value.pos.x},{y:row.value.pos.y}]。
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2018-06-03
    • 2021-12-27
    相关资源
    最近更新 更多