Svelte Tabs - 不要重新加载/销毁数据
Svelte Tabs - Don't reload / destroy data
我正在使用此处描述的精巧选项卡组件:
https://svelte.dev/repl/8e68120858e5322272dc9136c4bb79cc?version=3.5.1
在两个选项卡中,我有以下精巧的模板代码:
<TabPanel>
<Filter/>
<div id='to-filter' class='scroll-container'>
{#each value.items as item, i}
<Item
itemFilter={item.name}
itemDay={item.itemDay}
itemMonth={item.itemMonth}
itemYear={item.itemYear}
itemCity={item.itemCity}
itemCountry={item.itemCountry}
itemVenue={item.venue}
itemLink={item.link}
itemDotw={itemDatesOnly[i].itemDotw}
/>
{/each}
</div>
</TabPanel>
每次我点击选项卡在数据之间切换时,似乎是重新加载或重建它。如何调整选项卡组件,使其不会每次都破坏数据?
替换TabPanel.svelte
中的以下代码块
{#if $selectedPanel === panel}
<slot></slot>
{/if}
像这样:
<div hidden={$selectedPanel !== panel}>
<slot></slot>
</div>
这将确保所有当前未激活的选项卡面板都获得 hidden
属性,使它们对用户不可见,但它们将出现在 DOM 中。
这应该可以防止您的嵌套组件被重新渲染,因为当您在选项卡之间切换时,它们不会被破坏和重新安装。
我正在使用此处描述的精巧选项卡组件:
https://svelte.dev/repl/8e68120858e5322272dc9136c4bb79cc?version=3.5.1
在两个选项卡中,我有以下精巧的模板代码:
<TabPanel>
<Filter/>
<div id='to-filter' class='scroll-container'>
{#each value.items as item, i}
<Item
itemFilter={item.name}
itemDay={item.itemDay}
itemMonth={item.itemMonth}
itemYear={item.itemYear}
itemCity={item.itemCity}
itemCountry={item.itemCountry}
itemVenue={item.venue}
itemLink={item.link}
itemDotw={itemDatesOnly[i].itemDotw}
/>
{/each}
</div>
</TabPanel>
每次我点击选项卡在数据之间切换时,似乎是重新加载或重建它。如何调整选项卡组件,使其不会每次都破坏数据?
替换TabPanel.svelte
中的以下代码块{#if $selectedPanel === panel}
<slot></slot>
{/if}
像这样:
<div hidden={$selectedPanel !== panel}>
<slot></slot>
</div>
这将确保所有当前未激活的选项卡面板都获得 hidden
属性,使它们对用户不可见,但它们将出现在 DOM 中。
这应该可以防止您的嵌套组件被重新渲染,因为当您在选项卡之间切换时,它们不会被破坏和重新安装。