SvelteKit添加条目后响应式函数中数组显示有内容但length为0的问题求助
SvelteKit添加条目后响应式函数中数组显示有内容但length为0的问题求助
我现在遇到一个SvelteKit的奇怪问题,想求助大家!先给大家说下我的项目背景:
这是一个展示建筑系统组件列表的应用,还支持添加新组件,数据库用的MongoDB。
项目里的关键文件逻辑:
+page.js:负责获取组件列表、定义表格结构,还会填充“lookup”列表(用来在页面显示文本而不是_id),最后把这些数据都放在data里返回。page.svelte:使用<GenericListView>组件,传入data.rows.components,代码如下:
<div class="mt-2"> Components <GenericListView definition="{data.subAssetDefinition}" data="{data.rows.components}" table="true" on:invalidate="{myInvalidate}" /> </div>
<GenericListView>:用来构建<table>,里面会循环数据渲染<TableRowTd>组件,代码是这样的:
{#each data as row} <tr on:click="{rowClick (row)}"> {#each definition.tableFields as field} <TableRowTd {definition} {field} data="{row[field] || ''}" /> {/each} </tr> {/each}
<TableRowTd>:里面有个响应式的$:函数,作用是把传入的data(也就是_id)在对应的lookup列表里匹配,拿到对应的文本值,代码如下:
$: { displayValue = data; let fieldDef = definition.schema.find (el => el.name == field); if (data && fieldDef && fieldDef.listType) { console.log (`<TableRowTd> looking up list for field [${field}], table [${fieldDef.table}] , id [${data}]`) try { console.log (definition.lists) let list = undefined; /* EDIT - changed array.find() to for( ... */ console.log (`definition.lists.length [${definition.lists.length}]`); for (let i=0, found=false; i < definition.lists.length && !found; i++) { console.log (`Checking`); console.log(definition.lists[i]); if (definition.lists[i].table === fieldDef.table) { list = definition.lists[i]; found = true; } } if (list) { console.log (`found the list`) let row = list.data.find (el => el._id === data); if (row) { console.log (`found`) displayValue = row.value; } } } catch (err) { console.log('error on %s: %s', fieldDef.table, err.toString()) } } }
问题现象:
- 页面初始加载的时候一切正常,lookup值都能正确显示出来:
- 当添加一条新条目后,
invalidate事件被触发,+page.js里的load函数会重新调用。 - 但这时候,
<TableRowTd>里的响应式函数出现问题:控制台里能看到definition.lists数组是有内容的,但definition.lists.length却显示0!导致我没法把_id匹配成对应的文本,页面上就直接显示_id了: - 控制台日志里的情况更奇怪:明明能看到数组里有内容,但是length属性就是0:
我真的搞不懂这是怎么回事了——数组明明能被console.log()输出出来,但我的代码就是拿不到它的length?感觉像是Svelte或者SvelteKit的响应式相关问题,而且行为还时有时无,我完全摸不着头绪,有没有大佬能帮我分析下?
备注:内容来源于stack exchange,提问作者minisaurus
相关产品推荐
相关产品推荐

