В качестве альтернативной конструкции вы также можете использовать промежуточный компонент и настроить logi c там, используя <script context="module">
.
Что-то вроде:
<script>
import { onDestroy } from 'svelte'
import ProductRowWrapper, { resetLastCategory } from './ProductRowWrapper.svelte'
export let products
// make sure the last category is reset to an empty string when
// the entire product list is unmounted, in order to have a clean
// initialization when it is mounted again with a different set of products
onDestroy(resetLastCategory)
</script>
<table>
<thead>
<tr>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
{#each products as product}
<ProductRowWrapper {product} />
{/each}
</tbody>
</table>
ProductRowWrapper.svelte
<script context="module">
let lastCategory = ''
export function resetLastCategory() {
lastCategory = ''
}
</script>
<script>
import ProductCategoryRow from './ProductCategoryRow.svelte'
import ProductRow from './ProductRow.svelte'
export let product
let displayCategory = product.category !== lastCategory
lastCategory = product.category
</script>
{#if displayCategory}
<ProductCategoryRow category={product.category} />
{/if}
<ProductRow {product} />